SynchroMagic 2.0 build 503 (2千字)

看雪資料發表於2001-05-20

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中去。

相關文章