哦,对了,我刚才测试了将近 10 个程序,只有腾讯的一个 cm 加壳成功,(对 TX 无限膜拜啊 )
我写的 N 多 vc test 都是没动静的,2010 for vc 的直接加壳是 主程序 异常退出
如果,你运气好的话,竟然加壳成功,OK ,现在来说一下脱壳
脚本如下:
var dump
var e_ip
var men
var base
gmi eip,MODULEBASE
mov base,$RESULT
sub base,10000
loop: // 把低于基址的段,抢先注册,这招是以前从 FX 大侠处学来的
alloc 1000
mov men, $RESULT
cmp men,base
log men
jne loop
GPA "VirtualAlloc", "kernel32"
bp $RESULT
run
run
run
run
run
run
bc $RESULT
rtu
mov dump,eax
mov e_ip,eip
add e_ip,42
go e_ip
find eip,#C20400CCCCCCCCCCCCCCCCCCCCCCCC#
mov e_ip,$RESULT
go e_ip
sto
find eip,#FF25????????5F5E5B8BE55DC20C00CCCCCC#
go $RESULT
sto
cmt eip," W 哥,到 OEP 了 O(∩_∩)O哈哈~"
msg "请手工搜索 执行引擎区段,手工补上后,修\r\n正一下入口的参数,DUMP 出吧 O(∩_∩)O哈哈~"
因为如果你运气好,加壳竟然真的通过的情况下,有一部分代码会在被分配的动态区段里执行的,所以要补上
这里就不多说了,现在的 甲壳3 我还没见到对 IAT 的加密,所以,跑到 OEP 时,还要修正一下参数后 dump 出来
先收工从原程序中 DUMP 出一份 IAT 表,用 2进制方式补回 dump 出的程序中
再把执行引擎区段补上就 OK 了
——————————————————
修正神马参数啊
这里举个例子,因为我就只能加一个 CM (其他都失败了
),所以没能更多测试
00402FE0 3BC7 cmp eax, edi
00402FE2 BB 0000FFFF mov ebx, FFFF0000
00402FE7 74 0D je short 00402FF6
00402FE9 85C3 test ebx, eax
00402FEB 74 09 je short 00402FF6
00402FED F7D0 not eax
00402FEF A3 08C04000 mov dword ptr [40C008], eax
00402FF4 EB 60 jmp short 00403056
00402FF6 56 push esi
00402FF7 8D45 F8 lea eax, dword ptr [ebp-8]
00402FFA 50 push eax
00402FFB FF15 BC804000 call dword ptr [<&KERNEL32.GetSystemT>; kernel32.GetSystemTimeAsFileTime 从这里被分离了
00403001 8B75 FC mov esi, dword ptr [ebp-4]
00402FE0 3BC7 cmp eax, edi
00402FE2 BB 0000FFFF mov ebx, 0xFFFF0000
00402FE7 74 0D je short 00402FF6
00402FE9 85C3 test ebx, eax
00402FEB 74 09 je short 00402FF6
00402FED F7D0 not eax
00402FEF A3 08C04000 mov dword ptr [0x40C008], eax
00402FF4 - EB 60 jmp short 00403056
00402FF6 56 push esi
00402FF7 8D45 F8 lea eax, dword ptr [ebp-0x8]
00402FFA 50 push eax
00402FFB FF ??? ;引发异常,会跳到 403001 的
00402FFC 15 ??? ; Command crosses end of memory block
00402FFD BC ??? ; Command crosses end of memory block
00402FFE 80 ??? ; Command crosses end of memory block
00402FFF 40 inc eax
于是把 402FEB 的 je 修改为 jne ( 因为402FED 至402FF4 处代码不会用到,正好利用一下 )
最终修改代码为
00402FE7 /75 0D jnz short 00402FF6
00402FE9 |56 push esi
00402FEA |8D45 F8 lea eax, dword ptr [ebp-0x8]
00402FED |50 push eax
00402FEE |E8 0E000000 call 00403001 我们这里修改它的地址 (情人终于复合了)
00402FF3 |90 nop