GeekCat 发表于 2014-6-26 19:26:26

雨杰合同管理软件 V6.0 追码、DUP、算法分析

本帖最后由 geekcat 于 2014-6-27 08:57 编辑

【文章标题】:雨杰合同管理软件 V6.0    追码、DUP、算法分析【文章作者】: geekcat
【作者邮箱】: [email protected]
【作者主页】:
【软件名称】: 雨杰合同管理软件 V6.0
【软件大小】: 3.58 MB (3,764,631 字节)
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Borland C++ 1999
【使用工具】: OD、PEID
【操作平台】: XP SP3【下载地址】:http://www.qp35.com/【破解声明】:破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
【软件介绍】:完善的合同管理是公司健康运作的一个重要标志。雨杰合同管理软件简单易用,可方便的帮助你对供货商和客户的合同进行管理,协助您完成应收应付款分析,自动统计所有供货商和客户的应收应付款额,为您大大节省工作时间,提高工作效率。雨杰合同管理软件将是您明智的选择 。【破解声明】:PYG第九轮作业4--------------------------------------------------------------------------------------------------------------------------------【破解过程】
1、运行程序输入注册信息点击“注册”提示重启验证输入的注册信息是否正确;2、在软件的安装目录下找是否有保存注册信息没有找到,搜索注册表找到注册前面输入的注册信息;如下图:
3、打开插件“ApiBrieak”把注册表里面的全部六个断点都下好(调式没办法只好全部下)经过调试下“RegQueryValueExA”就可以了;注意右下角的堆栈窗口接着就是不停按F9直到如下处停下:
4、在出现“ValueName = "Name"”或“ValueName = "Pass"处“Alt+F9“返回程序领空,但要多次“Alt+F9“返回程序领空,我们就在出现“ValueName = "Date"返回;因为这三个注册表键值“Data”最后出现;5、返回后直接F8向下跑如可以看到明码:
6、F7进算法CALL:代码:
00677158/$55            push ebp                                 ;算法CALL00677159|.8BEC          mov ebp,esp0067715B|.51            push ecx0067715C|.B9 04000000   mov ecx,0x400677161|>6A 00         /push 0x000677163|.6A 00         |push 0x000677165|.49            |dec ecx00677166|.^ 75 F9         \jnz short Pact.0067716100677168|.51            push ecx00677169|.874D FC       xchg dword ptr ss:,ecx0067716C|.53            push ebx0067716D|.56            push esi0067716E|.57            push edi0067716F|.8BF9          mov edi,ecx00677171|.8955 FC       mov dword ptr ss:,edx         ;注册名入ebp-0x4   (ASCII "GeekCat")00677174|.8B45 FC       mov eax,dword ptr ss:00677177|.E8 D0DDD8FF   call Pact.00404F4C0067717C|.33C0          xor eax,eax0067717E|.55            push ebp0067717F|.68 19736700   push Pact.0067731900677184|.64:FF30       push dword ptr fs:00677187|.64:8920       mov dword ptr fs:,esp0067718A|.8BC7          mov eax,edi0067718C|.E8 FBD8D8FF   call Pact.00404A8C00677191|.8B45 FC       mov eax,dword ptr ss:         ;注册名入eax(ASCII "GeekCat")00677194|.E8 C3DBD8FF   call Pact.00404D5C                     ;取注册名的长度00677199|.8BF0          mov esi,eax0067719B|.85F6          test esi,esi0067719D|.7E 26         jle short Pact.006771C50067719F|.BB 01000000   mov ebx,0x1006771A4|>8D4D EC       /lea ecx,dword ptr ss:006771A7|.8B45 FC       |mov eax,dword ptr ss:006771AA|.0FB64418 FF   |movzx eax,byte ptr ds:   ;取注册名的每一位006771AF|.33D2          |xor edx,edx006771B1|.E8 E630D9FF   |call Pact.0040A29C                      ;每一位的ASCII码值006771B6|.8B55 EC       |mov edx,dword ptr ss:006771B9|.8D45 F8       |lea eax,dword ptr ss:006771BC|.E8 A3DBD8FF   |call Pact.00404D64                      ;把第一位的ASICC码值链接一起006771C1|.43            |inc ebx006771C2|.4E            |dec esi006771C3|.^ 75 DF         \jnz short Pact.006771A4006771C5|>8B45 F8       mov eax,dword ptr ss:         ;ASCII链接在一起(ASCII "4765656B436174")设为A006771C8|.E8 8FDBD8FF   call Pact.00404D5C006771CD|.8BF0          mov esi,eax006771CF|.85F6          test esi,esi006771D1|.7E 2C         jle short Pact.006771FF006771D3|.BB 01000000   mov ebx,0x1006771D8|>8B45 F8       /mov eax,dword ptr ss:006771DB|.E8 7CDBD8FF   |call Pact.00404D5C006771E0|.2BC3          |sub eax,ebx006771E2|.8B55 F8       |mov edx,dword ptr ss:006771E5|.8A1402      |mov dl,byte ptr ds:006771E8|.8D45 E8       |lea eax,dword ptr ss:006771EB|.E8 84DAD8FF   |call Pact.00404C74006771F0|.8B55 E8       |mov edx,dword ptr ss:006771F3|.8D45 F4       |lea eax,dword ptr ss:006771F6|.E8 69DBD8FF   |call Pact.00404D64006771FB|.43            |inc ebx006771FC|.4E            |dec esi006771FD|.^ 75 D9         \jnz short Pact.006771D8               ;循环把前面得到的A字符串倒序 (ASCII "471634B6565674") 设为B006771FF|>8D45 F8       lea eax,dword ptr ss:00677202|.50            push eax00677203|.B9 04000000   mov ecx,0x400677208|.BA 01000000   mov edx,0x10067720D|.8B45 F4       mov eax,dword ptr ss:00677210|.E8 A7DDD8FF   call Pact.00404FBC00677215|.8D45 F4       lea eax,dword ptr ss:00677218|.50            push eax00677219|.B9 04000000   mov ecx,0x40067721E|.BA 05000000   mov edx,0x500677223|.8B45 F4       mov eax,dword ptr ss:00677226|.E8 91DDD8FF   call Pact.00404FBC                     ;取字符串B的前四位(ASCII "4716")0067722B|.8B45 F8       mov eax,dword ptr ss:0067722E|.E8 29DBD8FF   call Pact.00404D5C00677233|.83F8 04       cmp eax,0x4                              ;把取得的字符串跟4比较00677236|.7D 2F         jge short Pact.0067726700677238|.8B45 F8       mov eax,dword ptr ss:0067723B|.E8 1CDBD8FF   call Pact.00404D5C                     ;把不够4位的字符串计算00677240|.8BD8          mov ebx,eax00677242|.83FB 03       cmp ebx,0x3                              ;把取得的字符串跟3比较 不够三位通过下面的循环来计算00677245|.7F 20         jg short Pact.0067726700677247|>8D4D E4       /lea ecx,dword ptr ss:0067724A|.8BC3          |mov eax,ebx0067724C|.C1E0 02       |shl eax,0x20067724F|.33D2          |xor edx,edx00677251|.E8 4630D9FF   |call Pact.0040A29C00677256|.8B55 E4       |mov edx,dword ptr ss:00677259|.8D45 F8       |lea eax,dword ptr ss:0067725C|.E8 03DBD8FF   |call Pact.00404D6400677261|.43            |inc ebx00677262|.83FB 04       |cmp ebx,0x400677265|.^ 75 E0         \jnz short Pact.0067724700677267|>8B45 F4       mov eax,dword ptr ss:         ;取字符串B的5-8位 (ASCII "34B6") 设为C0067726A|.E8 EDDAD8FF   call Pact.00404D5C0067726F|.83F8 04       cmp eax,0x400677272|.7D 2F         jge short Pact.006772A300677274|.8B45 F4       mov eax,dword ptr ss:00677277|.E8 E0DAD8FF   call Pact.00404D5C0067727C|.8BD8          mov ebx,eax0067727E|.83FB 03       cmp ebx,0x300677281|.7F 20         jg short Pact.006772A300677283|>8D4D E0       /lea ecx,dword ptr ss:00677286|.8BC3          |mov eax,ebx00677288|.C1E0 02       |shl eax,0x20067728B|.33D2          |xor edx,edx0067728D|.E8 0A30D9FF   |call Pact.0040A29C00677292|.8B55 E0       |mov edx,dword ptr ss:00677295|.8D45 F4       |lea eax,dword ptr ss:00677298|.E8 C7DAD8FF   |call Pact.00404D640067729D|.43            |inc ebx0067729E|.83FB 04       |cmp ebx,0x4006772A1|.^ 75 E0         \jnz short Pact.00677283               ;这个循环跟取B前四个字符串一样的计算006772A3|>8D45 F0       lea eax,dword ptr ss:006772A6|.BA 30736700   mov edx,Pact.00677330                  ;固定字符串   pactr954dj5 入edx006772AB|.E8 74D8D8FF   call Pact.00404B24006772B0|.8D45 DC       lea eax,dword ptr ss:006772B3|.50            push eax006772B4|.B9 04000000   mov ecx,0x4006772B9|.BA 01000000   mov edx,0x1006772BE|.8B45 F0       mov eax,dword ptr ss:006772C1|.E8 F6DCD8FF   call Pact.00404FBC                     ;取固定字符串的 前4位pact 设为E006772C6|.FF75 DC       push dword ptr ss:006772C9|.68 44736700   push Pact.00677344                     ;-006772CE|.FF75 F8       push dword ptr ss:            ;字符串B(ASCII "4716")006772D1|.8D45 D8       lea eax,dword ptr ss:006772D4|.50            push eax006772D5|.B9 05000000   mov ecx,0x5006772DA|.BA 05000000   mov edx,0x5006772DF|.8B45 F0       mov eax,dword ptr ss:006772E2|.E8 D5DCD8FF   call Pact.00404FBC                     ;固定字符串   pactr954dj5 的5-9位字符串 r954d 设为D006772E7|.FF75 D8       push dword ptr ss:006772EA|.68 44736700   push Pact.00677344                     ;-006772EF|.FF75 F4       push dword ptr ss:            ;字符串C (ASCII "34B6")006772F2|.8BC7          mov eax,edi006772F4|.BA 06000000   mov edx,0x6006772F9|.E8 1EDBD8FF   call Pact.00404E1C006772FE|.33C0          xor eax,eax00677300|.5A            pop edx00677301|.59            pop ecx00677302|.59            pop ecx00677303|.64:8910       mov dword ptr fs:,edx00677306|.68 20736700   push Pact.006773200067730B|>8D45 D8       lea eax,dword ptr ss:0067730E|.BA 0A000000   mov edx,0xA00677313|.E8 98D7D8FF   call Pact.00404AB000677318\.C3            retn
算法分析 1、取用户名的ASCII码                                                   4765656B436174               2、再倒取ASCII码                                                            471634B6565674               3、取固定码 pactr954dj5的前4位                                     pact               4、连接符                                                                         -               5、取倒取ASCII码的前4位和固定字符串的5-9位               4716r954d               6、连接符                                                                         -               7、取倒取ASCII码的5-8位                                                34B6               8、得到注册码:
注册信:GeekCat注册码:pact-4716r954d-34B6
说明:算法分析部分参照第九期学员:lixy8888学习分析算法,追码部分是自己完成;----------------------------------------------------------------------------------------------------------------------------【破解总结】:1、字符串没加密,容易切入注册验证流程中;2、注册信息明文保存,要改进;3、注册码明文出现寄存器里,这点要改进应该加密;----------------------------------------------------------------------------------------------------------------------------【版权声明】:本文原创于geekcat,转载请注明作者并保存文章的完整!
附:正在学习用DUP,把“patch”和“loader”当作练习;


DaShanRen 发表于 2014-6-26 21:49:57

没见过ASCIII,只见过ASCII。{:tongue:}

GeekCat 发表于 2014-6-27 08:56:31

DaShanRen 发表于 2014-6-26 21:49
没见过ASCIII,只见过ASCII。

{:shy:}

修改了,谢谢提醒!!

1552759476@ 发表于 2014-6-27 09:02:41

{:sad:}{:shocked:}这些是好犀利的,我们都在学习!!

houhesun 发表于 2015-1-17 15:53:46

xinbinchi 发表于 2016-7-6 20:22:58

路过必顶,谢谢分享。

hyj7229 发表于 2016-8-2 01:12:50

谢谢分享,下来看下。
页: [1]
查看完整版本: 雨杰合同管理软件 V6.0 追码、DUP、算法分析