标 题:Asproctect 1.2加壳的CAXA V2的脱壳和NAG窗口去除
(4千字)
发信人:火翼[CCG]
时 间:2002-5-1 16:56:52
详细信息:
软件: CAXA
版本: V2
破解者: 火翼[CCG]
组织 : [CCG] (China Cracking Group)
使用软件: pedump+superbpm+importrec+trw2000
本来CAXA已经被破解过了,但破解者给程序加了一个NAG窗口,并
且用asprotect1.2加了壳,最近正在研究脱壳,正好练习一下。
加载superbpm,用trw2000载入,按3次F10来到下面
019F:005F3002 CALL 005F3022 //注意,这里的Call就是asprotect的
//经典,不能按F10,只能按F8,否则就
//飞了,下面还有很多处,多注意以下
019F:005F3007 JMP 1014BE08
019F:005F300C PUSH ES
019F:005F300D ADD [EAX],AL
继续跟下去,会有几处循环,看明白后用G跳过去就可以了,循环都过去后在执行
一会就会来到
019F:01F713AB ADD ESP,BYTE -0C
019F:01F713AE CALL 01F63130
019F:01F713B3 JNZ NEAR 01F63E0C
019F:01F713B9 CALL 01F642C8 //也是asprotect的经典,最后一个要
019F:01F713BE CALL 01F691CC //跟进去
019F:01F713C3 CALL 01F69B5C
019F:01F713C8 CALL 01F6BEBC
019F:01F713CD CALL 01F63E0C
019F:01F713D2 MOV ESP,EBP
019F:01F713D4 POP EBP
019F:01F713D5 RET 0C
跟进去后就会遇到最大的麻烦RET了
对于asprotect很多ret的作用是跳到esp所指向的位置,遇到ret时要
d esp一下如果显示的数字(要反着读,如看到d5 14 f6 01 就是01 f6 14 d5)和原来
的地址差不多就可以按F10,如果是BFXXXXX之类的就要用些特殊的方法了
一般都用找ret法,即找下面最近的ret,并在那里设断,并按G, 就会断下来
但有时没有RET或不好找,也可以使用另一种办法,例如类似以下代码
019F:01F6FEA1 XOR EAX,EAX
019F:01F6FEA3 RET //此处即为上述的ret,下面附近没有ret
019F:01F6FEA4 JMP SHORT 01F6FEA7
019F:01F6FEA6 CALL 04E2BEDC
019F:01F6FEAB INT 20
019F:01F6FEAD PUSH DWORD [FS:EAX]
019F:01F6FEB0 JMP SHORT 01F6FEB3
019F:01F6FEB2 JMP 3317881B
019F:01F6FEB7 ADD BL,CH
019F:01F6FEB9 ADD [EAX+64],EBP
019F:01F6FEBC POP DWORD [00]
019F:01F6FEC2 JMP SHORT 01F6FEC6 //在这里设断,可以断下来
019F:01F6FEC4 CALL C22A56CA
019F:01F6FEC9 POP EDX
类似的代码很多,都可用类似的设断方法断下来
继续跟,如果遇到按F10时CALL使程序运行了,就用F8进去
运行一段时间后(有点长,一定要有耐心),来到下面
019F:01F6FBFE MOV EDX,04
019F:01F6FC03 CALL 01F6C39C //也是看雪的书里提
//到过的代码
019F:01F6FC08 CALL 01F6FC22
019F:01F6FC0D MOV EAX,[ESP+0C]
019F:01F6FC11 ADD DWORD [EAX+B8],BYTE +02
019F:01F6FC18 MOV DWORD [EAX+18],00
019F:01F6FC1F XOR EAX,EAX
019F:01F6FC21 RET //很特别的跳转
019F:01F6FC22 XOR EAX,EAX
019F:01F6FC24 PUSH DWORD [FS:EAX]
019F:01F6FC27 MOV [FS:EAX],ESP
019F:01F6FC2A XOR [EAX],EAX
019F:01F6FC2C POP DWORD [FS:00]
019F:01F6FC33 POP EAX
019F:01F6FC34 CMP DWORD [01F73934],BYTE +00
019F:01F6FC3B JZ 01F6FC51
019F:01F6FC3D PUSH BYTE +0C
019F:01F6FC3F MOV ECX,01F73934
019F:01F6FC44 LEA EAX,[EBP-08]
019F:01F6FC47 MOV EDX,04
019F:01F6FC4C CALL 01F6C39C
019F:01F6FC51 PUSH DWORD [EBP-04]
019F:01F6FC54 PUSH DWORD [EBP-08]
在那个ret处以下实在找不到什么有特点的设断处,所以就把下面的10来句全
设上断,按G后,断在01f6fc2c处,继续运行,不一会就看到
019F:01FAC904 CLD
019F:01FAC905 SUB EAX,ESP
019F:01FAC907 CALL 01FAC924
019F:01FAC90C POP EBX
019F:01FAC90D POP EAX
019F:01FAC90E ADD EAX,7C6060E4
019F:01FAC913 POP ESP
019F:01FAC914 OR ECX,ECX
019F:01FAC916 JZ 01FAC8FB
019F:01FAC918 MOV [ECX],EAX
019F:01FAC91A ADD EAX,EBX
019F:01FAC91C MOV [ESP+1C],EAX
019F:01FAC920 POPA
019F:01FAC921 JMP EAX //从这里转到入口点,在这里d eax就可以
//看到入口点 48d154
019F:01FAC923 ADD [EBX],DH
按f10运行到019f:00048d154处suspend
运行pedump,把程序dump出来,然后运行没脱壳的程序,用importrec重建引入表
(具体操作参见看雪的书或者论坛精华里的相关文章)
然后就只剩下去掉NAG窗口了,用trw2000载入脱好壳的程序,bpx messageboxa
断下后,pmodule, 然后在前一句设断,再次载入,断下后把call messageboxa
改为6个nop,执行,竟然非法操作,跟进下一个call发现是堆栈的问题,把前面
的call messageboxa 改为add esp ,10(为什么是10?因为不去掉call时执行call
前后esp相差10),执行,成功
记下修改前后的机器码,ok
整理
先脱壳
然后用16进制编辑工具打开脱壳后的文件
查找 FF 15 80 c3 56 00
改为 81 C4 10 00 00 00
标
题:关于这个教程的补遗 (386字)
发信人:火翼[CCG]
时
间:2002-5-2 4:36:10
详细信息:
1、这个软件是用VC 6.0 编的,可以用BW2000直接找出入口点。
2、这个软件可以用caspr1.1直接脱壳
3、原来的破解里还包括一个ebkey.dll,其实和破解无关,只是把原来的
ebgui.dll改了个名字,并且修改了一些资源,还用Asprotect 1.2
加了壳。
4、软件引入表比较简单,不用手动修改,用importREC安全自动搞定
5、这个软件本来使用rockey的狗加密,加密用的Dll为windows\system\keypro.dll,搞定也比较简单。
标
题:我的第一篇破狗文章,请多支持,CAXA V2升级补丁的破解 (1千字)
发信人:火翼[CCG]
时 间:2002-5-4 23:09:25
详细信息:
软件:CAXA
版本:V2_4升级版
破解者: 火翼[CCG]
组织 : [CCG] (China Cracking Group)
使用软件: trw2000
最近一直在研究CAXA,这回是破解升级补丁的加密狗
因为最近一直在研究CAXA,而且我又对Rockey的狗比较熟悉(有同学在
那里工作,hehe),所以知道读狗的dll为windows\system\keypro.dll。
其实不知道也没关系,仔细看一下eb.exe的引入表就能找到,很明显的。
把keypro.dll拷贝到trw2000下的dll目录里,载入eb.exe后bpx keypro
断下后bd *,pmodule,返回44013c处,向上看发现有一个跳转可以避开读狗,于是
在哪里下断点,再次载入,在440115处r fl z,继续,可以正常使用所有功能,但
会弹出一个授权使用的对话框,到这里才明白了原来上次解的NAG窗口不是原破解
者加的,他只是改变了程序的资源,让那里显示他的网址,上次理解错了,不好意
思。
019F:00440105 MOV DWORD [ESI],00589E64
019F:0044010B CALL 0043FB50
019F:00440110 ADD ESP,BYTE +04
019F:00440113 CMP EAX,EBX
019F:00440115 JNZ NEAR 004401FD (NO JUMP)
019F:0044011B PUSH DWORD 005B9A90
019F:00440120 MOV [005B9A96],BX
019F:00440127 MOV [005B9A98],BX
019F:0044012E MOV [005B9A94],BX
019F:00440135 MOV [005B9A92],BX
019F:0044013C CALL `KEYPRO!KEYPRO` //第一次读狗的地方
019F:00440141 MOV EDI,03
019F:00440146 MOV ESI,63
019F:0044014B CMP [005B9A90],DI
因为有了上次经验,直接bpx messageboxa
断下后bd*,pmodule,返回到44027a处
019F:00440279 PUSH EBX
019F:0044027A CALL `USER32!MessageBoxA` // NAG 窗口
019F:00440280 LEA ECX,[ESP+10]
019F:00440284 MOV BYTE [ESP+E0],05
019F:0044028C CALL `MFC42!ord_00000320`
把call `USER32!MessageBoxA`改为add esp,10 ,全部搞定,具体原因参见
上次的文章。
总结
其实这次这么容易主要是运气,北航海尔的软件工程师流了后门,可以不用
读狗。升级补丁www.caxa.com有下载。
整理
用16进制编辑工具打开eb.exe
查找 0f 85 e2 00 00 00 68 90
改为 e9 e3 00 00 00 90 68 90
查找 ff 15 a0 52 58 00 8d
改为 81 c4 10 00 00 00 8d