lmze2000 发表于 2015-5-23 21:11

学习破解之路:【无线天5.29】寻码过程

本帖最后由 lmze2000 于 2015-5-26 20:43 编辑

做为刚刚学得一点点逆向皮毛的小白,为能帮助一些人而有点小成就感{:17_1068:}
也深知,从一点不会摸索着前行的艰难,很多时候都是在猜测与试验中一点点的往前撑着走,
应坛友Jiejec的要求,录制了一个简单的视频,由于是第一次操作,声音不好听,还有些害羞呀,不习惯讲解,就全是文字说明的吧。
大神们就不要鄙视我了,给指点学习的方向和意见呀~~{:17_1062:}

链接:http://pan.baidu.com/s/19Aiqq 密码:c7gd

做为小白一名,向那些分享教程的前辈、同辈们致敬!!{:1_931:},发现写完一篇排版精美的教程是需要多么大的精力,特别是写了一半然后所有的东西全没了,还要再重新来一遍的时候。(刚刚写完一半,结果贴不上代码,然后切换了下浏览器的兼容模式,结果已经写好的全没有了。)

软件:无线天5.29windows版
下载地址:http://wifi.corpcorp.com/down.html
壳:经查无壳
所用工具:Cari Olldby
介绍就不多做了,上一张软件安装完成后的截图。安装完是试用7天,20用户数量(这篇破文一路坎坷,先前的截图,和后来测试时的代码完全不一样了,还得重新截一遍图{:17_1084:})



一、现在我们开始动手了,经过这么多天的学习,我们一般动手前,都是要先查一下壳,看有没有壳保护程序。经查这个无线天是裸奔的,这对我们小新手来说是最好的消息。
接下来的步骤就是,先运行程序,如上一张图,找到注册的位置,先注册一下,看看出错信息,来初步掌握一下注册的流程,是直接弹出错误信息,还是重启验证等等
好给我们的破解带来帮助。经过简单的试验,上面的是“激活码错误”这条消息,那么我们就用OD载入程序,然后在汇编窗口右键--->“中文搜索引挚"--->"智能搜索"
搜索的关键字就用”激活码错误" ,搜索结果见下图,,在“激活码错误”那行,双击左键,跳转到反汇编窗口。来查找关键Call的位置。

1.1 这是搜索窗口,用来查找错误信息


1.2 查找关键Call
一般的对于新手来说,在查找关键Call的地方,太让人头疼了,即使是看教程,在图文的指导下也可以找到关键Call,可一般让自己来找,都会
发蒙。特别是大神们,指着某个Call说,这个就是关键的了。那么像我们小白要怎么找呢。现在我们的这个水平,多半要多试验,多跑些冤枉路
会对以后的提高有好处。那么我们就以下面的例子来说明如何找关键Call.(说明:由于系统不同,OD载入的程序地址,可能每台机器不一样,
不用安全的参照我图片的地址来对应,你们可以参照反汇编出来的代码来查看。)



下面这段代码,就是刚才双击错误信息跳转到汇编窗口的代码,注意看反汇编出来的代码,别注意前面的地址:
通过观察,跳过激活码错误的跳转依次有(从下向上的顺序)
01138262   /EB 13         jmp short WiFiNoNo.01138277
01138245   /75 30         jnz short WiFiNoNo.01138277
01138234   /75 41         jnz short WiFiNoNo.01138277
01138227   /74 4E         je short WiFiNoNo.01138277
这4条都是跳过错误的跳转,虽然在这上面有一个Call
0113822C    FF15 D0612D01   call dword ptr ds:[<&KERNEL32.IsBadReadP>; kernel32.IsBadReadPtr(但是看注释应该是系统调用,不是关键Call)
,在往上面看看,又发现了一条je跳转语句,并且还有test比较,这条je跳转语句,直接将上面4条跳向成功的语句都给越过去了。
所以这么可疑的Call,成为关键Call是非常有可能的,F2在这下断点,先试运行一下。经过多次调试,这个是关键Call无疑了。
01138212    8D5424 58       lea edx,dword ptr ss:
01138216    E8 B53E0100   call WiFiNoNo.0114C0D0                   ; 此处是关键Call,注册码也是在这里计算完成。
0113821B    83C4 0C         add esp,0xC
0113821E    84C0            test al,al
01138220    74 42         je short WiFiNoNo.01138264

这段是关键Call段的代码
01138212    8D5424 58       lea edx,dword ptr ss:
01138216    E8 B53E0100   call WiFiNoNo.0114C0D0                   ; 此处是关键Call,注册码也是在这里计算完成。
0113821B    83C4 0C         add esp,0xC
0113821E    84C0            test al,al
01138220    74 42         je short WiFiNoNo.01138264
01138222    8B77 04         mov esi,dword ptr ds:
01138225    3BF3            cmp esi,ebx
01138227    74 4E         je short WiFiNoNo.01138277
01138229    6A 08         push 0x8
0113822B    56            push esi
0113822C    FF15 D0612D01   call dword ptr ds:[<&KERNEL32.IsBadReadP>; kernel32.IsBadReadPtr
01138232    85C0            test eax,eax
01138234    75 41         jnz short WiFiNoNo.01138277
01138236    8B06            mov eax,dword ptr ds:
01138238    83F8 01         cmp eax,0x1
0113823B    75 05         jnz short WiFiNoNo.01138242
0113823D    8B76 0C         mov esi,dword ptr ds:
01138240    EB 0B         jmp short WiFiNoNo.0113824D
01138242    83F8 14         cmp eax,0x14
01138245    75 30         jnz short WiFiNoNo.01138277
01138247    8B4E 70         mov ecx,dword ptr ds:
0113824A    8B71 0C         mov esi,dword ptr ds:
0113824D    6A 01         push 0x1
0113824F    68 E8B72E01   push WiFiNoNo.012EB7E8                   ; 提示
01138254    56            push esi
01138255    BE 9CD92E01   mov esi,WiFiNoNo.012ED99C                ; 您使用的是旧版激活码,请找联系软件卖家升级激活码。
0113825A    E8 71981300   call WiFiNoNo.01271AD0
0113825F    83C4 0C         add esp,0xC
01138262    EB 13         jmp short WiFiNoNo.01138277
01138264    6A 10         push 0x10
01138266    68 00902E01   push WiFiNoNo.012E9000                   ; 错误
0113826B    68 D0D92E01   push WiFiNoNo.012ED9D0                   ; 激活码错误
01138270    53            push ebx




1.3、通过上面的分析,下好断点, 我们F9将程序运行起来,然后点击注册按钮---->输入我们的假码(说明,在写这篇破文的时候,发现我们输入的假码,会影响到生成的
真码,也就是说,不同的假码会使真码的有效用户数量不同,这个一会在做下测试,我用的数字假码、123生成3个有效用户,1234567生成了67个有效用户,123456789012345生
成了9242个有效用户、7131个无效用户,具体咋回事,由于不会分析,也弄不清楚。只能来猜测。)
在点击注册的时候,程序断在了我们刚才下的断点处,即
01138216    E8 B53E0100   call WiFiNoNo.0114C0D0                   ; 此处是关键Call,注册码也是在这里计算完成。
在这里,我们按F7进入Call



1.4 我们的追码开始了漫长的过程,,,进到这个Call里面,我们单步F8往前走,直到遇见了如下代码。
这里有个cmp比较,然后一个je跳转,和一个jmp回跳,这里是比较假码是否和真码一样长度,如果不等于15,就回跳,
如果大家的假码是不等于15的,那么在cmp完成后,修改一下ZF标志位的值为1,让je跳转实现。
00CEC2D3    03F8            add edi,eax
00CEC2D5    13DA            adc ebx,edx
00CEC2D7    3B7424 44       cmp esi,dword ptr ss:          ; 此处应该是对假码的长度进行比较,
00CEC2DB    74 26         je short WiFiNoNo.00CEC303
00CEC2DD    8D8C24 C0000000 lea ecx,dword ptr ss:
00CEC2E4    E8 07BC0600   call WiFiNoNo.00D57EF0
00CEC2E9    8D8C24 A4000000 lea ecx,dword ptr ss:
00CEC2F0    E8 FBBB0600   call WiFiNoNo.00D57EF0
00CEC2F5    8D4C24 50       lea ecx,dword ptr ss:
00CEC2F9    E8 F2BB0600   call WiFiNoNo.00D57EF0
00CEC2FE^ E9 A8FEFFFF   jmp WiFiNoNo.00CEC1AB                  ; 当不满足的时候,jmp跳回上面。
00CEC303    8B5424 18       mov edx,dword ptr ss:
00CEC307    8B4424 14       mov eax,dword ptr ss:
00CEC30B    53            push ebx
00CEC30C    57            push edi
00CEC30D    52            push edx
00CEC30E    50            push eax
00CEC30F    68 8002E900   push WiFiNoNo.00E90280                   ; %014I64d%06I64d




在上面的代码向下不远处,同样还有一处jnz的跳转,也不能让它成功回跳过去,继续修改ZF标志位,
00CEC394 E8 57890700 call WiFiNoNo.00D64CF0 ; 在这个Call里面,这个附近EDX生成一串数字,其中的后4位,感觉像有效用户数。
同时发现这个Call会让EDX生成一串数字,这串数字的后4位,就是真码的有效用户数。
00CEC371    83C4 1C         add esp,0x1C
00CEC374    394424 44       cmp dword ptr ss:,eax
00CEC378^ 0F85 5FFFFFFF   jnz WiFiNoNo.00CEC2DD                  ; 此处的jnz回跳,同样不能让它跳回去,修改ZF标志位为1
00CEC37E    8B4424 18       mov eax,dword ptr ss:
00CEC382    8B4C24 14       mov ecx,dword ptr ss:
00CEC386    50            push eax
00CEC387    51            push ecx
00CEC388    68 FCDCE800   push WiFiNoNo.00E8DCFC                   ; %014I64d
00CEC38D    8DB424 94000000 lea esi,dword ptr ss:
00CEC394    E8 57890700   call WiFiNoNo.00D64CF0                   ; 在这个Call里面,会生成有效授权用户数
00CEC399    83C4 0C         add esp,0xC
00CEC39C    50            push eax
00CEC39D    8D8C24 A8000000 lea ecx,dword ptr ss:
00CEC3A4    C68424 0C010000>mov byte ptr ss:,0x4


1.5 经过上面2个回跳之后,继续F8,就离我们成功的地方不远了,先是发现机器码出现了。



1.6、在机器码出现后,真码就在其后出现了。



相应的代码如下:
00CEC54E    8D8424 8C000000 lea eax,dword ptr ss:
00CEC555    50            push eax
00CEC556    C68424 2C010000>mov byte ptr ss:,0x7
00CEC55E    E8 CDE9FFFF   call WiFiNoNo.00CEAF30                   ; 这个call生成了机器码,在EAX中。
00CEC563    83C4 04         add esp,0x4
00CEC566    C68424 28010000>mov byte ptr ss:,0x8
00CEC56E    8378 14 10      cmp dword ptr ds:,0x10
00CEC572    72 02         jb short WiFiNoNo.00CEC576
00CEC574    8B00            mov eax,dword ptr ds:
00CEC576    8B4C24 48       mov ecx,dword ptr ss:
00CEC57A    8B11            mov edx,dword ptr ds:
00CEC57C    52            push edx
00CEC57D    8B5424 48       mov edx,dword ptr ss:
00CEC581    8D8C24 00010000 lea ecx,dword ptr ss:
00CEC588    51            push ecx
00CEC589    C68424 30010000>mov byte ptr ss:,0x9
00CEC591    8B12            mov edx,dword ptr ds:
00CEC593    8BC8            mov ecx,eax
00CEC595    E8 A6F5FFFF   call WiFiNoNo.00CEBB40                   ; 这个Call是生成注册码的子Call。不会分析算法,过去了。
00CEC59A    83C4 28         add esp,0x28
00CEC59D    8D4C24 6C       lea ecx,dword ptr ss:
00CEC5A1    C68424 08010000>mov byte ptr ss:,0xB
00CEC5A9    E8 42B90600   call WiFiNoNo.00D57EF0
00CEC5AE    8B4424 3C       mov eax,dword ptr ss:          ; 真假码都出现了。
00CEC5B2    50            push eax
00CEC5B3    8D8C24 8C000000 lea ecx,dword ptr ss:
00CEC5BA    E8 5186FAFF   call WiFiNoNo.00C94C10
00CEC5BF    8BC8            mov ecx,eax




这个是用假码123456789012345生成的真码,用户数是9424,7173个失败的。

至此,完成无线天的追码过程,难点就是找到关键CAll,并且中间有2个回跳过程要一定不要让它们回跳过去,发现这个问题,都是通过多次的失败才找到的。
再就是从进入到关键Call后,F8的代码太远了,一会接着去试一下,不同的假码生成的用户数量问题,有结果后再编辑本帖子。
---------------------刚才又试了几个假码,,
使用ABCD.....XYZ生成的真码,支持的用户数是11652个,失效用户数是4904.
堆栈 ss:=0018E110, (ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
eax=0018E080, (ASCII "QC6WLPTSTU39VVB")



堆栈地址=001CE06C, (ASCII "99999999999999")
ecx=0862E4B0, (ASCII "P82CFUF8999SPJ9B")



lmze2000 发表于 2016-3-25 07:26

LCG丶Ran 发表于 2016-3-23 08:50
@lmze2000 能否把最新版的破解掉,找的几个下载地址都不行。。

http://pan.baidu.com/s/1c1F3KoK
这是5.29的版本。。。然后参照教程。找出注册码,然后在升级到新版本无线天。

hancool 发表于 2015-5-29 22:16

我也是新手,搞了一下这个软件的破解。跟踪了三天,终于找到一个破解的方法,我的思路是bypass关键的跳转;用OD打开(winxp环境下),修改了三个关键跳转:

1、
0045C374      394424 44   cmp dword ptr ss:,eax
0045C378    ^ 0F85 5FFFFFFF jnz WiFiNoNo.0045C2DD
修改为:
0045C374      33C0          xor eax,eax
0045C376      90            nop
0045C377      90            nop
0045C378      90            nop
0045C379      90            nop
0045C37A      90            nop
0045C37B      90            nop
0045C37C      90            nop
0045C37D      90            nop
2:
0045C610      84DB          test bl,bl
0045C612    ^ 0F85 93FBFFFF jnz WiFiNoNo.0045C1AB
修改为:
0045C610      33DB          xor ebx,ebx
0045C612      90            nop
0045C613      90            nop
0045C614      90            nop
0045C615      90            nop
0045C616      90            nop
0045C617      90            nop
3:
00447F4D      85C0          test eax,eax
00447F4F      74 0C         je short WiFiNoNo.00447F5D
修改为:
00447F4D      33C0          xor eax,eax
00447F4F      EB 0C         jmp short WiFiNoNo.00447F5D

然后在反汇编窗口中右健-“复制到可执行文件”-“所有修改”,选择“全部复制”;在弹出的文件窗口中,右键-“保存到文件”,另存为wifinono2.exe。重新运行wifinono2.exe,输入123456789012345,即可注册成功(这个号码是我破解时用的,很奇怪换了其它的却提示注册失败。能力有限,注册算法还没有完全搞懂,希望有大神指点指点。)

hkzx 发表于 2015-5-23 21:17

谢谢楼主,幸苦了。赞一个!!!!!

asd9988 发表于 2015-5-23 21:34

后续呢?没了?

lmze2000 发表于 2015-5-23 21:41

asd9988 发表于 2015-5-23 21:34
后续呢?没了?

多次编辑呢,不敢一下完成了,{:17_1084:}

北鱼何为 发表于 2015-5-23 21:41

说好的分析呢?

JamesFanQin 发表于 2015-5-23 21:43

是呀。楼主,只有一半哦。继续。。。

ayida 发表于 2015-5-23 22:19

楼主,继续!

happy曲月 发表于 2015-5-23 22:41

前排学习

Norton 发表于 2015-5-23 22:44

楼主给力

qaz003 发表于 2015-5-23 23:18

楼主好有耐心撒花赞一下。。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 学习破解之路:【无线天5.29】寻码过程