野猫III 发表于 2006-5-8 00:49:15

猫脱 PECompact 2.x -> Jeremy Collake

猫脱 PECompact 2.x -> Jeremy Collake

软件名称:灵点条码打印系统
语言种类: 简体中文
版 本 号: V2.0
文件大小: 909 K
发布日期: 2006.03.22
软件类型: 共享
脱壳文章作者:野猫III
演示动画:https://www.chinapyg.com/viewthread.php?tid=4678&page=1&extra=page%3D1#pid25362

下载地址:http://download.enet.com.cn/html/030812006032201.html
新版下载:http://down.itbbs.com/Software/View-Software-5672.html <---下载了好像也是2.0版!
软件简介:
通用的条码打印系统,配置灵活支持20多种国际标准,无须专用打印机和条码纸,在Windows系统下安装即可使用,打印提供多种选项,可以选择打印条码汉字标题,条形码编码,位置可以任意确定,条码制作所见所得,提供实时预览功能,无需在打印机上反复调试,对纸张无特殊要求,从信封,卡片,证照到不干胶标签,专用条码纸都可以准确打印,输入可以批量制作,个别输入或文本文件导入,输出提供批量,选范围和个别打印的功能,完全能够适合各种行业的特殊要求。

脱壳过程:

一、用 PEiD查出是PECompact 2.x -> Jeremy Collake壳。

二、用OD载入,忽略所有异常,然后重新载入程序。载入后,代码停在这里:

00401000 > $ B8 681B6300 MOV EAX,JYtmw.00631B68
00401005 . 50 PUSH EAX
00401006 . 64:FF35 00000>PUSH DWORD PTR FS:
//F8单步来到这里,看寄存器。ESP红了。

++++++++++++++++++++++++
EAX 00631B68 JYtmw.00631B68
ECX 0012FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0012FFC0 。。。。。。。ESP红了!我们接着下断这个硬件断点。
EBP 0012FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 00401006 JYtmw.00401006
C 0 ES 0023 32位 0(FFFFFFFF)
P 1 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 1 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDE000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_CLASS_ALREADY_EXISTS (00000582)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty -UNORM D1D8 01050104 00000000
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
3 2 1 0 E S P U O Z D I
FST 4020 Cond 1 0 0 0 Err 0 0 1 0 0 0 0 0 (EQ)
FCW 027F Prec NEAR,53 掩码 1 1 1 1 1 1
+++++++++++++++++++++++++++++
在OD命令栏输入dd 12FFC0,Enter键之后,我们在数据窗口中看到:
0012FFC0 00631B68 JYtmw.00631B68 。。。右键--断点---硬件断点--双字
0012FFC4 7C816D4F 返回到 kernel32.7C816D4F
0012FFC8 7C930738 ntdll.7C930738
====================然后点OD的运得按钮。来到:
7C957826 3B45 F8 CMP EAX,DWORD PTR SS:
7C957829 72 09 JB SHORT ntdll.7C957834
7C95782B 3B45 F4 CMP EAX,DWORD PTR SS:
7C95782E ^ 0F82 F731FFFF JB ntdll.7C94AA2B
7C957834 50 PUSH EAX
7C957835 E8 67000000 CALL ntdll.7C9578A1
7C95783A 84C0 TEST AL,AL
7C95783C ^ 0F84 E931FFFF JE ntdll.7C94AA2B
7C957842 F605 5AC3997C 8>TEST BYTE PTR DS:,80
7C957849 0F85 20720100 JNZ ntdll.7C96EA6F
。。F8到这里的时候,跳转不实现。右键--->跟随!
+++++++++++++++++++++++++++++++++
7C96EA6F 6A 10 PUSH 10
7C96EA71 53 PUSH EBX
7C96EA72 6A 00 PUSH 0
7C96EA74 FF75 0C PUSH DWORD PTR SS:
7C96EA77 56 PUSH ESI
7C96EA78 E8 136B0100 CALL ntdll.7C985590
7C96EA7D 8945 F0 MOV DWORD PTR SS:,EAX
7C96EA80 ^ E9 CA8DFEFF JMP ntdll.7C95784F
7C96EA85 57 PUSH EDI 。。。右键-->断点-->运行到所选!
7C96EA86 FF75 F0 PUSH DWORD PTR SS:
+++++++++++++++++++++++++++
7C957852 8D45 EC LEA EAX,DWORD PTR SS:
7C957855 50 PUSH EAX
7C957856 FF75 0C PUSH DWORD PTR SS:
7C957859 53 PUSH EBX
7C95785A 56 PUSH ESI
7C95785B E8 F3BEFCFF CALL ntdll.7C923753
7C957860 F605 5AC3997C 8>TEST BYTE PTR DS:,80
7C957867 8BF8 MOV EDI,EAX
7C957869 0F85 16720100 JNZ ntdll.7C96EA85
7C95786F 395D 08 CMP DWORD PTR SS:,EBX
7C957872 0F84 1B720100 JE ntdll.7C96EA93
7C957878 8BC7 MOV EAX,EDI
7C95787A 33C9 XOR ECX,ECX
7C95787C 2BC1 SUB EAX,ECX
7C95787E ^ 0F85 8631FFFF JNZ ntdll.7C94AA0A
7C957884 F646 04 01 TEST BYTE PTR DS:,1
7C957888 0F85 4F720100 JNZ ntdll.7C96EADD
7C95788E C645 FF 01 MOV BYTE PTR SS:,1
7C957892 5F POP EDI
7C957893 5B POP EBX
7C957894 8A45 FF MOV AL,BYTE PTR SS:
7C957897 5E POP ESI
7C957898 C9 LEAVE
7C957899 C2 0800 RETN 8 .............单步来到这里。再单步跳进。一直单步来到下面。
++++++++++++++++++++++
00631B9B 53 PUSH EBX
00631B9C 51 PUSH ECX
00631B9D 57 PUSH EDI
00631B9E 56 PUSH ESI
00631B9F 52 PUSH EDX
00631BA0 8D98 57120010 LEA EBX,DWORD PTR DS: 。。。F8到这时,观察ESP.
00631BA6 8B53 18 MOV EDX,DWORD PTR DS:
++++++++++++++++++++++++
EAX F06308ED
ECX 0012FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFD9000
ESP 0012FFAC ........ESP红了,下命令点断: dd 12ffac
EBP 0012FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 00631BA0 JYtmw.00631BA0
C 0 ES 0023 32位 0(FFFFFFFF)
P 0 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_CLASS_ALREADY_EXISTS (00000582)
EFL 00000202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 empty -UNORM BBB0 01050104 00000000
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
3 2 1 0 E S P U O Z D I
FST 4020 Cond 1 0 0 0 Err 0 0 1 0 0 0 0 0 (EQ)
FCW 027F Prec NEAR,53 掩码 1 1 1 1 1 1
++++++++++++++++++++++++++++++++++++++++++++++++++++
在OD中下命令断点: dd 12ffac , Enter键之后,我们在数据跟随窗口中看到:
0012FFAC 7C92EB94 ntdll.KiFastSystemCallRet 。。。右键--断点-硬件访问--双字。

0012FFB0 FFFFFFFF
0012FFB4 7C930738 ntdll.7C930738
+++++++++++点OD的运行按钮程序被断在这里:
00631C25 5E POP ESI ; JYtmw.005839E0
00631C26 5F POP EDI
00631C27 59 POP ECX
00631C28 5B POP EBX
00631C29 5D POP EBP
00631C2A FFE0 JMP EAX 。。。F8单步来这。再F8进去看到光明!
00631C2C E0 39 LOOPDNE SHORT JYtmw.00631C67

+++++++++++++++++++++++++++++++++
005839E0 55 DB 55 ; CHAR 'U'
。。。。。右键---分析--从模块中删除分析
005839E1 8B DB 8B
005839E2 EC DB EC
005839E3 83 DB 83
005839E4 C4 DB C4
005839E5 F0 DB F0
005839E6 B8 DB B8
005839E7 40 DB 40 ; CHAR '@'
005839E8 16 DB 16
+++++++++++++++++++
005839E0 55 PUSH EBP 。。。。。。。。很熟悉吧!右键--用Ollydump脱壳--保存。
005839E1 8BEC MOV EBP,ESP
005839E3 83C4 F0 ADD ESP,-10
005839E6 B8 40165800 MOV EAX,JYtmw.00581640
005839EB E8 A43DE8FF CALL JYtmw.00407794
005839F0 68 783A5800 PUSH JYtmw.00583A78
005839F5 68 8C3A5800 PUSH JYtmw.00583A8C ; ASCII "TApplication"
005839FA E8 5547E8FF CALL JYtmw.00408154 ; JMP 到 USER32.FindWindowA
++++++++++++++++
1839E0

试运行脱壳后的程序,正常!查壳得:Borland Delphi 6.0 - 7.0

至此,脱壳完成!谢谢观看。

本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[ 本帖最后由 野猫III 于 2006-5-10 16:48 编辑 ]

风球 发表于 2006-5-8 10:30:52

支持猫```

明白原理熟悉操作后 ESP定律可以直接命令行 HR ESP ,方便点

这个壳可以在命令行 HR ESP 回车,F9运行几次后看到

00631C2A   - FFE0                     jmp eax      //再F8单步可以直接JMP到OEP

野猫III 发表于 2006-5-8 21:28:25

原帖由 风球 于 2006-5-8 10:30 发表
支持猫```

明白原理熟悉操作后 ESP定律可以直接命令行 HR ESP ,方便点

这个壳可以在命令行 HR ESP 回车,F9运行几次后看到

00631C2A   - FFE0                     jmp eax      //再F8单步可以直接JMP ...

太感谢风球兄啦!

老大的方法:

下断点:bp VirtualFreeF9运行
https://www.chinapyg.com/viewthread.php?tid=782&highlight=PECompact

[ 本帖最后由 野猫III 于 2006-5-27 14:17 编辑 ]

风球 发表于 2006-5-8 21:43:16

看了一下,怀疑这个软件的算法可能有点问题,不知是作者故意的还是失误?还是我分析有误???我分析是的2.1的

004BEB7D   E8 2268F4FF                call 55_.004053A4
004BEB82   3BF0                     cmp esi,eax                         ; 第五位跟长度比较
004BEB84   74 15                      je short 55_.004BEB9B      //长度大于16的话根本不可能相等
004BEB86   8B45 FC                  mov eax,dword ptr ss:
004BEB89   E8 1668F4FF                call 55_.004053A4
004BEB8E   83F8 10                  cmp eax,10          //跟16比较
004BEB91   7D 08                      jge short 55_.004BEB9B            ; 这里应该是JGE才对呀???

改为JGE后算法就通了,我的注册机得到的注册码就正常了!!!

野猫III 发表于 2006-5-8 23:57:49

原帖由 风球 于 2006-5-8 21:43 发表
看了一下,怀疑这个软件的算法可能有点问题,不知是作者故意的还是失误?还是我分析有误???我分析是的2.1的



改为JGE后算法就通了,我的注册机得到的注册码就正常了!!!

太棒啦,风球兄请添加多个条码试试!

[ 本帖最后由 野猫III 于 2006-5-9 00:15 编辑 ]

风球 发表于 2006-5-9 11:31:45

应该添加多少都没问题吧```30

放在https://www.chinapyg.com/viewthread.php?tid=4689&page=1&extra=page%3D1#pid25501,没完全测试,猫可帮忙测试一下```呵```

[ 本帖最后由 风球 于 2006-5-9 12:25 编辑 ]

野猫III 发表于 2006-5-9 20:35:49

原帖由 风球 于 2006-5-9 11:31 发表
应该添加多少都没问题吧```30

放在https://www.chinapyg.com/viewthread.php?tid=4689&page=1&extra=page%3D1#pid25501,没完全测试,猫可帮忙测试一下```呵```

呵呵。。。猫来支持兄弟的啦!

最后的一站!如果风球兄做个演示或写出它的破文更好!

因为这个软件相对比较特殊,都要改一个JUMP才能跳出注册码的。

呵呵。。。老大给本帖加精也,谢谢!

[ 本帖最后由 野猫III 于 2006-5-9 20:39 编辑 ]

风球 发表于 2006-5-9 22:01:32

原帖由 野猫III 于 2006-5-9 20:35 发表


呵呵。。。猫来支持兄弟的啦!

最后的一站!如果风球兄做个演示或写出它的破文更好!

因为这个软件相对比较特殊,都要改一个JUMP才能跳出注册码的。

呵呵。。。老大给本帖加精也,谢谢!

呵```我也想贴出分析代码的,只但由于这个代码太长了,贴出来也不好作说明,不好写的说,只能说一下大概的算法相当于是逐位比较的类型,长度12位,先比较 偶数位的与当前日期有关有一个异或运算,再比较 奇数位与机器码有关简单的运算。只是怀疑原程序算法机制有个问题,就是上面说的那个问题

machenglin 发表于 2006-5-9 22:39:27

原帖由 风球 于 2006-5-9 22:01 发表


呵```我也想贴出分析代码的,只但由于这个代码太长了,贴出来也不好作说明,不好写的说,只能说一下大概的算法相当于是逐位比较的类型,长度12位,先比较 偶数位的与当前日期有关有一个异或运算,再比较 奇数 ...
风球=正解。

machenglin 发表于 2006-5-9 22:40:51

鼓励野猫III 原创。进步快!
页: [1] 2
查看完整版本: 猫脱 PECompact 2.x -> Jeremy Collake