首页
社区
课程
招聘
[旧帖] [邀请码已发][原创]学习了几天,我的第一次成功破解(爆破,汗!),发上来,与菜鸟分享! 0.00雪花
发表于: 2009-7-26 10:43 1604

[旧帖] [邀请码已发][原创]学习了几天,我的第一次成功破解(爆破,汗!),发上来,与菜鸟分享! 0.00雪花

2009-7-26 10:43
1604
软件名称:清然英语缩略词翻译系统(缩译通.exe)
软件版本:V2.02 绿色版
文件大小:2.15M
软件简介:清然英语缩略词翻译系统是目前国内唯一一款专门针对英语缩略词进行即时翻译的工具,弥补了英文缩略词查询领域的空白,涵盖专业领域极广,包括计算机、医学、电子通信、日常用语等众多方面的专用与常用缩略词,适用于各个行业人士的日常缩略词翻译,是一个不可多得的顶尖助手,具有其他翻译软件不可比拟的优点,集成缩略词、缩略词全称、详细含义解释三者于一体,词汇量丰富,解释详尽,功能齐全,性能优越,操作简易,界面清爽美观,运行时占用空间小、查询速度快;可支持模糊查询功能,并添加了鼠标取词的功能,只需要移动鼠标就可以随处进行翻译。

作        者: much
级        别:很菜的菜鸟
时        间: 209-07-25
工        具:W32DASM黄金版中文版(手头上只有这个,也只会这个软件)

缩译通的该版本为绿色版的,此前该软件已经有注册机存在了!
学习了几天,拿它来练练手,并写成文章,以作为学习记录!

由于看N多的文章说,每次XX前,都会查壳,菜鸟一个,尚没有学习到哪一步,所以,只有撞运气,期望该软件没有壳。

运行缩译通.exe,看看注册部分,发现有100次的使用限制。
随便注册一下,提示“注册码错误,请重新输入。”。这个就好办了,至少还有这个提示。

用W32Dasm对其反汇编,反汇编完成后,在“串式数据参考”中找到刚才的错误提示,反复双击,发现只有一处调用,双击时,会来到:004F7E5D处。
同时,在“串式数据参考”窗口中,紧挨着“注册码错误,请重新输入。”发现了“注册成功,谢谢使用本软件!”的字符串。反复双击该字符串,会跳转到:004F802E处。

将具体的代码及其上面的代码贴上:

:004F7E1B 64FF30                  push dword ptr fs:[eax]
:004F7E1E 648920                  mov dword ptr fs:[eax], esp
:004F7E21 833D54D24F0000          cmp dword ptr [004FD254], 00000000
:004F7E28 0F8418020000            je 004F8046                à前一个Z=0跳转
:004F7E2E 8D55FC                  lea edx, dword ptr [ebp-04]
:004F7E31 A154D24F00              mov eax, dword ptr [004FD254]
:004F7E36 E82DFDFFFF              call 004F7B68
:004F7E3B 8D55F8                  lea edx, dword ptr [ebp-08]
:004F7E3E 8B861C030000            mov eax, dword ptr [esi+0000031C]
:004F7E44 E8079DF4FF              call 00441B50
:004F7E49 8B45F8                  mov eax, dword ptr [ebp-08]
:004F7E4C 8B55FC                  mov edx, dword ptr [ebp-04]
:004F7E4F E880CEF0FF              call 00404CD4  --à   这里调用比较子程序
:004F7E54 742B                    je 004F7E81                        à后一个Z=0跳转

:004F7E56 6A40                    push 00000040

* Possible StringData Ref from Code Obj ->"提示"
                                  |
:004F7E58 B980804F00              mov ecx, 004F8080

* Possible StringData Ref from Code Obj ->"注册号错误,请重新输入。 "
                                  |
:004F7E5D BA88804F00              mov edx, 004F8088        ----à双击字符串时,会跳转到这里
:004F7E62 A190B84F00              mov eax, dword ptr [004FB890]
:004F7E67 8B00                    mov eax, dword ptr [eax]
:004F7E69 E83AA0F6FF              call 00461EA8
:004F7E6E 8B861C030000            mov eax, dword ptr [esi+0000031C]
:004F7E74 8B10                    mov edx, dword ptr [eax]
:004F7E76 FF92C0000000            call dword ptr [edx+000000C0]
:004F7E7C E9C5010000              jmp 004F8046

***********注册成功的字符串****************************************************
* Possible StringData Ref from Code Obj ->"注册成功,谢谢使用本软件! "
                                  |
:004F802E BA50814F00              mov edx, 004F8150
:004F8033 A190B84F00              mov eax, dword ptr [004FB890]
:004F8038 8B00                    mov eax, dword ptr [eax]
:004F803A E8699EF6FF              call 00461EA8
:004F803F 8BC6                    mov eax, esi
:004F8041 E8CA65F6FF              call 0045E610

根据这几天所学习的知识,在成功或失败这两种可能的其中一种的代码上方会有一个比较后的跳转。
比较的结果无非就是两种,如果对了就往下执行,如果错了就跳转。
因此,此时的关键问题就在于如何找到该跳转的语句 。

按照诸多文章中所说,从注册失败处的字符串往上找,看是否存在跳转。说实话,刚看此类爆破文章时,说找到某处,将74xx该位75xx,或修改为9090啥的,一连看几个文章都如是说,实在是不得其解,看过几个文章后,也没有发现为什么,憋不住了,翻教程,在<Crack Tutorial>中,发现74、75为JZ/JE、JNZ/JNE的机器码,修改的目的就是相当于修改判断条件了。
又看了一些汇编命令,以前接触过一些汇编,但没有多少印象,也就再次学习一下!

扯远了…

转到004F7E5D处,向上找,意识中,应该查找诸如:test、cmp、sub等之类的指令,翻了大概有几十行,没有发现此类函数有与jz/je、jnz/jne函数挨着很近的出现的。

回到004F7E5D处,再次往上找,在上面的一段代码中,发现有两个je(下面代码中),看前一个je,发现接下来的语句好像是导入什么数据,接着往下,三个call命令后,来到后一个je处,再往后,就是提示失败,似乎就是这个跳转吧?心中有些不确定的疑问?比较在哪里?仔细看看,把目光看向紧挨着后一个je的call,莫非在此处?
转到00404CD4处,果然,此段程序为比较。

****** call 00404CD4  调用比较子程序****************************************
:00404CD4 53                      push ebx
:00404CD5 56                      push esi
:00404CD6 57                      push edi
:00404CD7 89C6                    mov esi, eax
:00404CD9 89D7                    mov edi, edx
:00404CDB 39D0                    cmp eax, edx
:00404CDD 0F848F000000            je 00404D72
:00404CE3 85F6                    test esi, esi
:00404CE5 7468                    je 00404D4F
:00404CE7 85FF                    test edi, edi
:00404CE9 746B                    je 00404D56
:00404CEB 8B46FC                  mov eax, dword ptr [esi-04]
:00404CEE 8B57FC                  mov edx, dword ptr [edi-04]
:00404CF1 29D0                    sub eax, edx
:00404CF3 7702                    ja 00404CF7
:00404CF5 01C2                    add edx, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404CF3(C)
|
:00404CF7 52                      push edx
:00404CF8 C1EA02                  shr edx, 02
:00404CFB 7426                    je 00404D23

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D19(C)
|
:00404CFD 8B0E                    mov ecx, dword ptr [esi]
:00404CFF 8B1F                    mov ebx, dword ptr [edi]
:00404D01 39D9                    cmp ecx, ebx
:00404D03 7558                    jne 00404D5D
:00404D05 4A                      dec edx
:00404D06 7415                    je 00404D1D
:00404D08 8B4E04                  mov ecx, dword ptr [esi+04]
:00404D0B 8B5F04                  mov ebx, dword ptr [edi+04]
:00404D0E 39D9                    cmp ecx, ebx
:00404D10 754B                    jne 00404D5D
:00404D12 83C608                  add esi, 00000008
:00404D15 83C708                  add edi, 00000008
:00404D18 4A                      dec edx
:00404D19 75E2                    jne 00404CFD
:00404D1B EB06                    jmp 00404D23

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404D06(C)
|
:00404D1D 83C604                  add esi, 00000004
:00404D20 83C704                  add edi, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404CFB(C), :00404D1B(U)
|
:00404D23 5A                      pop edx
:00404D24 83E203                  and edx, 00000003
:00404D27 7422                    je 00404D4B
:00404D29 8B0E                    mov ecx, dword ptr [esi]
:00404D2B 8B1F                    mov ebx, dword ptr [edi]
:00404D2D 38D9                    cmp cl, bl
:00404D2F 7541                    jne 00404D72
:00404D31 4A                      dec edx
:00404D32 7417                    je 00404D4B
:00404D34 38FD                    cmp ch, bh
:00404D36 753A                    jne 00404D72
:00404D38 4A                      dec edx
:00404D39 7410                    je 00404D4B
:00404D3B 81E30000FF00            and ebx, 00FF0000
:00404D41 81E10000FF00            and ecx, 00FF0000
:00404D47 39D9                    cmp ecx, ebx
:00404D49 7527                    jne 00404D72

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404D27(C), :00404D32(C), :00404D39(C)
|
:00404D4B 01C0                    add eax, eax
:00404D4D EB23                    jmp 00404D72

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404CE5(C)
|
:00404D4F 8B57FC                  mov edx, dword ptr [edi-04]
:00404D52 29D0                    sub eax, edx
:00404D54 EB1C                    jmp 00404D72

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404CE9(C)
|
:00404D56 8B46FC                  mov eax, dword ptr [esi-04]
:00404D59 29D0                    sub eax, edx
:00404D5B EB15                    jmp 00404D72

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404D03(C), :00404D10(C)
|
:00404D5D 5A                      pop edx
:00404D5E 38D9                    cmp cl, bl
:00404D60 7510                    jne 00404D72
:00404D62 38FD                    cmp ch, bh
:00404D64 750C                    jne 00404D72
:00404D66 C1E910                  shr ecx, 10
:00404D69 C1EB10                  shr ebx, 10
:00404D6C 38D9                    cmp cl, bl
:00404D6E 7502                    jne 00404D72
:00404D70 38FD                    cmp ch, bh

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404CDD(C), :00404D2F(C), :00404D36(C), :00404D49(C), :00404D4D(U)
|:00404D54(U), :00404D5B(U), :00404D60(C), :00404D64(C), :00404D6E(C)
|
:00404D72 5F                      pop edi
:00404D73 5E                      pop esi
:00404D74 5B                      pop ebx
:00404D75 C3                      ret

原来,如果输入的注册码正确就跳转,错误就往下执行,自然就来到了错误提示处。
因此,要做的,就是改变判断条件,将je改为jne。也就是将该行中的机器码742B改为752B

回到004F7E54 742B                    je 004F7E81                        à后一个Z=0跳转

双击该行,在W32Dasm窗口下方状态栏处,看到相应的偏移地址为000F7254

用UltraEdit打开软件,找到000F7254h 处,将74改为75,保存,退出UltraEdit!

再次运行“缩译通.exe”,随便输入注册码,提示“注册成功,谢谢使用本软件!”。
显示100次限制的字符串也没有出现了。

第一次爆破结束了。没有之前想象的激动… 呵呵!

学习仍在继续,菜鸟跟我来了……

那么,现在回过头来看,该软件存在使用100的限制,在哪个地方呢?
查找字符串“可使用次数为100次”,
来到下面这段代码:

* Possible StringData Ref from Code Obj ->"【注】可使用次数为100次,次数还剩"
                                  |
:004F8403 6880844F00              push 004F8480
:004F8408 A120B64F00              mov eax, dword ptr [004FB620]
:004F840D FF30                    push dword ptr [eax]
:004F840F B864000000              mov eax, 00000064         -à这里,将100写入eax
:004F8414 5A                      pop edx                         -à这里,获取已经使用的次数(此处还有说明)
:004F8415 2BC2                    sub eax, edx                 à 这里,计算并将剩余的次数写入eax!
:004F8417 8D55F8                  lea edx, dword ptr [ebp-08]
:004F841A E8F90DF1FF              call 00409218
:004F841F FF75F8                  push [ebp-08]

如果,我们能在没有将之前比较注册码是否正确的跳转由je改为jne的话,如果能成功修改此处的使用次数限制的话,也可以变相永久使用该软件。

此时,最简单的地方就是不让其计算还有多少次,也就是将sub eax, edx 改为两个空指令。此时,eax中仍然为100,则程序中会显示,还有100次的使用机会!
因此,可以修改此处的机器码2BC2为9090。
验证后,果然如此!

本文章到此告一段落,但学习还没有结束,因为还有以下几个问题还没有弄清楚:
已经使用的次数,是如何记录在c:\bootwin.DAT文件中,又是一种怎样的算法?
bootwin.DAT文件内容格式:
[xiyu]
APP=6BEC
times=6BEA64

真正的次数,是如果变换为times的值的?
注册码又是怎么一种算法,也就上面的调用的那段子程序?

我将接着学习,并弄清楚上面的问题。
上述问题解决后,会再次形成文章,以求指正!

最后,

谢谢前辈们(包括写文章的和制作电子书的)的辛苦,让我有资料可供学习!
谢谢各位路过的朋友!
请给予指正!

much    09-7-26 星期日

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
给个软件下载的link呀
难得搜
2009-7-26 11:50
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
抱歉!
是我机器上的软件,没有发上来!
如果有需要,随后会发上来的!
2009-7-26 12:18
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我刚才在网上搜索了一下,一下就可以找到!
这里给出连接!
http://www.525down.com/soft_info/6348.html
2009-7-26 12:28
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
文章不错,几个问题应该是不能解决的,需要很多信息了
2009-7-27 10:25
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢楼上的!

正在加紧学习,以早上解决!
2009-7-27 12:31
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不介意的话分享一下, 网上的都带马。。
2009-7-27 15:53
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可以,随后上传,现在这会儿用手机上的!

抱歉!
2009-7-27 18:32
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
文章中的软件,已经上传!
谢谢浏览!
2009-7-27 19:21
0
雪    币: 89
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
值得鼓励。
有对话框的一般来说相对简单。
我觉得没对话框的就比较麻烦了。
还有就是给你显示注册失败,但是没有弹出对话框。
我还没有啥思路。
大家一起学习吧
2009-7-27 23:36
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习中!!!
2009-8-23 12:23
0
游客
登录 | 注册 方可回帖
返回
//