http://www.gelosoft.com/synchro.exe
ASProtect的殼。OEP為43EC73。
下面5處引入函式名無法在ImpRec中解析:
RVA:6915C,69268,69274,69350,69380
對應的程式段為(下面的是6個函式):
//這裡是初始化時呼叫6個函式的地方
0177:0167C868 PUSH 00
0177:0167C86A CALL KERNEL32!GetModuleHandleA
0177:0167C86F MOV [016835D4],EAX
0177:0167C874 CALL KERNEL32!GetVersion
0177:0167C879 MOV [016835D8],EAX
0177:0167C87E PUSH 016835E4
0177:0167C883 CALL KERNEL32!GetVersionExA
0177:0167C888 CALL KERNEL32!GetCurrentProcess
0177:0167C88D MOV [016835DC],EAX
0177:0167C892 CALL KERNEL32!GetCurrentProcessId
0177:0167C897 MOV [016835E0],EAX
0177:0167C89C CALL KERNEL32!GetCommandLineA
0177:0167C8A1 MOV [01683678],EAX
0177:0167C8A6 RET
//以下緊跟著的是直接使用上面幾個函式的返回值的地方
0177:0167C8A7 NOP
0177:0167C8A8 PUSH EBP
0177:0167C8A9 MOV EBP,ESP
0177:0167C8AB MOV EAX,[EBP+08]
0177:0167C8AE TEST EAX,EAX
0177:0167C8B0 JNZ 0167C8B9
0177:0167C8B2 MOV EAX,[01683560]
0177:0167C8B7 JMP 0167C8BF
0177:0167C8B9 PUSH EAX
0177:0167C8BA CALL KERNEL32!GetModuleHandleA
0177:0167C8BF POP EBP
0177:0167C8C0 RET 0004
0177:0167C8C3 NOP
0177:0167C8C4 MOV EAX,[016835D8]
0177:0167C8C9 RET
0177:0167C8CA MOV EAX,EAX
0177:0167C8CC PUSH EBP
0177:0167C8CD MOV EBP,ESP
0177:0167C8CF PUSH ESI
0177:0167C8D0 PUSH EDI
0177:0167C8D1 MOV EAX,[EBP+08]
0177:0167C8D4 MOV EDI,EAX
0177:0167C8D6 MOV ESI,016835E4
0177:0167C8DB MOV ECX,00000025
0177:0167C8E0 REPZ MOVSD
0177:0167C8E2 MOV AL,01
0177:0167C8E4 POP EDI
0177:0167C8E5 POP ESI
0177:0167C8E6 POP EBP
0177:0167C8E7 RET 0004
0177:0167C8EA MOV EAX,EAX
0177:0167C8EC MOV EAX,[016835DC]
0177:0167C8F1 RET
0177:0167C8F2 MOV EAX,EAX
0177:0167C8F4 MOV EAX,[016835E0]
0177:0167C8F9 RET
0177:0167C8FA MOV EAX,EAX
0177:0167C8FC MOV EAX,[01683678]
0177:0167C901 RET
0177:0167C902 MOV EAX,EAX
0177:0167C904 PUSH EBP
0177:0167C905 MOV EBP,ESP
0177:0167C907 POP EBP
0177:0167C908 RET 0004
0177:0167C90B NOP
0177:0167C90C PUSH EBP
0177:0167C90D MOV EBP,ESP
0177:0167C90F POP EBP
0177:0167C910 RET 0004
有種辦法可以對上述的幾個函式進行特殊處理,以便脫殼後的程式可以跨平臺執行,不過比較麻煩。就是新增一個section,把上述地址為0168XXXX的變數全部放在這個新的section中(當然地址不再是0168XXXX了,相應地也要修改引用這些地址的那些指令),並把上述引用這些0168XXXX地址的幾段程式碼也都搬到這個新的section中。並採用SMC,修改去殼後的EXE,將程式入口指向這個新的section,這樣一載入去殼後的EXE就會執行這個新的section中的程式碼,完成上述幾個函式的初始化。在這個新的section中,還要增加程式碼填充ImpRec未解析出來的那幾個RVA處的值,以便指向新的section中的這幾段程式碼。
總的來說就是把本來應該放在殼中的東西全部搬到新增的section中去。