Sendige 发表于 2017-1-17 13:48

XX宝宝起名软件 V23.6 算法分析

本帖最后由 zjh16529 于 2019-6-6 18:50 编辑

因为看到论坛有人需要这个软件的算法分析,所以无聊就写下这篇文章和大家一起交流学习,这篇算法分析比较适合新手学习,因为算法比较简单。
该软件是一个易语言软件,所以直接下易语言按钮事件断下,找关键的算法call

004A802A /.55            push ebp                                 ;注册算法
004A802B |.8BEC          mov ebp,esp
004A802D |.81EC 34000000 sub esp,0x34
004A8033 |.C745 FC 00000>mov,0x0
004A803A |.C745 F8 00000>mov,0x0
004A8041 |.C745 F4 00000>mov,0x0
004A8048 |.6A 01         push 0x1
004A804A |.B8 ED6F6D00   mov eax,生辰八字.006D6FED                  ;wenyuhao
004A804F |.8945 F0       mov ,eax
004A8052 |.8D45 F0       lea eax,
004A8055 |.50            push eax
004A8056 |.68 D0C38A00   push 生辰八字.008AC3D0                     ; 8}Z\t
004A805B |.68 84C48A00   push 生辰八字.008AC484

上面这段就是算法的开始,我们一步一步分析,因为这个算法比较简单,适合新手去学习练手!!

004A812C |.83C4 04       add esp,0x4
004A812F |>58            pop eax
004A8130 |.8945 FC       mov ,eax
004A8133 |.6A FF         push -0x1
004A8135 |.6A 08         push 0x8
004A8137 |.68 0F940216   push 0x1602940F
004A813C |.68 27540152   push 0x52015427
004A8141 |.E8 82E40800   call 生辰八字.005365C8                     ;获取我输入的假码
004A8146 |.83C4 10       add esp,0x10
004A8149 |.8945 F0       mov ,eax
004A814C |.68 04000080   push 0x80000004
004A8151 |.6A 00         push 0x0
004A8153 |.8B45 F0       mov eax,
004A8156 |.85C0          test eax,eax
004A8158 |.75 05         jnz short 生辰八字.004A815F




004A8182 |.83C4 04       add esp,0x4
004A8185 |>68 45C26300   push 生辰八字.0063C245                     ;'
004A818A |.FF75 EC       push
004A818D |.68 3BDB6E00   push 生辰八字.006EDB3B                     ;pass='
004A8192 |.B9 03000000   mov ecx,0x3
004A8197 |.E8 B292F5FF   call 生辰八字.0040144E
004A819C |.83C4 0C       add esp,0xC
004A819F |.8945 E8       mov ,eax
004A81A2 |.8B5D EC       mov ebx,
004A81A5 |.85DB          test ebx,ebx

“Pass=”和假码合并

pass='123456789'

然后一直下去会进行一些没关紧要的操作,这些可以忽略不理。

004A8234 |.83C4 04       add esp,0x4
004A8237 |>58            pop eax
004A8238 |.8945 F8       mov ,eax
004A823B |.6A FF         push -0x1
004A823D |.6A 08         push 0x8
004A823F |.68 0F940216   push 0x1602940F
004A8244 |.68 27540152   push 0x52015427
004A8249 |.E8 7AE30800   call 生辰八字.005365C8    继续取出假码
004A824E |.83C4 10       add esp,0x10
004A8251 |.8945 F0       mov ,eax
004A8254 |.68 04000080   push 0x80000004
004A8259 |.6A 00         push 0x0
004A825B |.8B45 F0       mov eax,
004A825E |.85C0          test eax,eax
004A8260 |.75 05         jnz short 生辰八字.004A8267
------------------------------------------------------------------------------------------------------------------------------------------------------

004A828A |.83C4 04       add esp,0x4
004A828D |>68 45C26300   push 生辰八字.0063C245                     ;'
004A8292 |.FF75 EC       push
004A8295 |.68 3BDB6E00   push 生辰八字.006EDB3B                     ;pass='
004A829A |.B9 03000000   mov ecx,0x3
004A829F |.E8 AA91F5FF   call 生辰八字.0040144E
004A82A4 |.83C4 0C       add esp,0xC
004A82A7 |.8945 E8       mov ,eax
004A82AA |.8B5D EC       mov ebx,
004A82AD |.85DB          test ebx,ebx
继续“Pass=”和假码合并
pass='123456789'
------------------------------------------------------------------------------------------------------------------------------------------------------

004A833C |.83C4 04       add esp,0x4
004A833F |>58            pop eax
004A8340 |.8945 F4       mov ,eax
004A8343 |.68 04000080   push 0x80000004
004A8348 |.6A 00         push 0x0
004A834A |.A1 D4C38A00   mov eax,dword ptr ds:          ; 机器码序列号,请记下这个全局变量
004A834F |.85C0          test eax,eax

我这里的机器码为:2018682084


004A8368 |.83C4 10       add esp,0x10
004A836B |.8945 E4       mov ,eax
004A836E |.8955 E8       mov ,edx
004A8371 |.DF6D E4       fild qword ptr ss:
004A8374 |.DD5D E4       fstp qword ptr ss:
004A8377 |.DD45 E4       fld qword ptr ss:
004A837A |.DC0D 09C46300 fmul qword ptrds:             ;机器码×323    注意这里的操作都是以10进制操作
004A8380 |.DD5D DC       fstp qword ptr ss:
004A8383 |.68 01060080   push 0x80000601
004A8388 |.FF75 E0       push
004A838B |.FF75 DC       push
004A838E|.6801000000   push 0x1
004A8393 |.BB 907A5300   mov ebx,生辰八字.00537A90


这里就是机器码*323
2018682084*323= hex (D0460BAC)




004A839D |.83C4 10       add esp,0x10
004A83A0 |.68 01030080   push 0x80000301
004A83A5 |.6A 00         push 0x0
004A83A7 |.50            push eax
004A83A8 |.68 01000000   push 0x1
004A83AD |.BB E08C5300   mov ebx,生辰八字.00538CE0
004A83B2 |.E8 F9E10800   call 生辰八字.005365B0                     ;将结果转换为10进制
004A83B7 |.83C4 10       add esp,0x10
004A83BA |.8945 D4       mov ,eax


经典的易语言文本比较

004A83D0 |.83C4 10       add esp,0x10
004A83D3 |.8945 D0       mov ,eax
004A83D6 |.8B45 D4       mov eax,
004A83D9 |.50            push eax
004A83DA |.FF75 D0       push
004A83DD |.E8 648FF5FF   call 生辰八字.00401346
004A83E2 |.83C4 08       add esp,0x8
004A83E5 |.83F8 00       cmp eax,0x0
004A83E8 |.B8 00000000   mov eax,0x0
004A83ED |.0F94C0      sete al
004A83F0 |.8945 CC       mov ,eax
004A83F3 |.8B5D D0       mov ebx,
004A83F6 |.85DB          test ebx,ebx




爆破的话修改下面跳转就可以了,我们现在是学算法分析,所以我们不玩爆破。

总结:注册码=机器码* 323




知道了注册码怎么计算出来的,现在我们来找出机器码的算法。

刚才叫大家记下这个全局变量

现在我们搜索这个常量


全部都下上断点

00401F16.5E            pop esi                                  ;057ACA30
00401F17.8BF8          mov edi,eax
00401F19.F3:A4         rep movs byte ptr es:,byte ptrds:[>
00401F1B>50            push eax
00401F1C.8B1D D4C38A00 mov ebx,dword ptrds:
00401F22.85DB          test ebx,ebx
00401F24.74 09         je short 生辰八字.00401F2F
00401F26.53            push ebx
00401F27.E8 7E461300   call 生辰八字.005365AA
00401F2C.83C4 04       add esp,0x4

我们发现在这里断下,这时候,eax已经出现了机器码,我们往上找,看看机器码怎么计算出来的。


00401DDD.6A 00         push 0x0
00401DDF.6A 00         push 0x0
00401DE1.6A 00         push 0x0
00401DE3.68 07000700   push 0x70007
00401DE8.6A 00         push 0x0
00401DEA.FF35 CCC38A00 push dword ptrds:
00401DF0.68 02000000   push 0x2
00401DF5.B8 06000000   mov eax,0x6
00401DFA.BB 60965C00   mov ebx,生辰八字.005C9660
00401DFF.E8 B8471300   call 生辰八字.005365BC
00401E04.83C4 1C       add esp,0x1C
00401E07. 8B1D CCC38A00 mov ebx,dword ptr ds:
00401E0D.83C3 08       add ebx,0x8
00401E10.895D FC       mov dword ptr ss:,ebx
00401E13.68 04000080   push 0x80000004
00401E18.6A 00         push 0x0
00401E1A.8B5D FC       mov ebx,dword ptr ss:
00401E1D.8B03          mov eax,dword ptr ds:
00401E1F.85C0          test eax,eax
00401E21.75 05         jnz short 生辰八字.00401E28
00401E23.B8 44C26300   mov eax,生辰八字.0063C244
00401E28>50            push eax
00401E29.68 01000000   push 0x1
00401E2E.BB 10845300   mov ebx,生辰八字.00538410

这里是取硬盘序列号

我这里是S248NXAH110569Z

00401E51> \50            push eax
00401E52.68 01000000   push 0x1
00401E57.B8 0E000000   mov eax,0xE
00401E5C.BB 20E65D00   mov ebx,生辰八字.005DE620
00401E61.E8 56471300   call 生辰八字.005365BC
00401E66.83C4 10       add esp,0x10
00401E69.8945 F4       mov dword ptr ss:,eax
00401E6C.8B5D F8       mov ebx,dword ptr ss:
00401E6F.85DB          test ebx,ebx                           ;生辰八字.005DE620

将硬盘序列号进行MD5操作



00401E93> \58            pop eax
00401E94.A3 D0C38A00   mov dword ptr ds:,eax
00401E99.68 00000000   push 0x0
00401E9E.BB F0CC5300   mov ebx,生辰八字.0053CCF0
00401EA3.E8 08471300   call 生辰八字.005365B0
00401EA8.83C4 04       add esp,0x4
00401EAB.8945 F4       mov dword ptr ss:,eax
00401EAE.DB45 F4       fild dword ptr ss:
00401EB1.DD5D F4       fstp qword ptr ss:
00401EB4.DD45 F4       fld qword ptr ss:
00401EB7.DC05 F2C36300 fadd qword ptrds:
00401EBD.DD5D EC       fstp qword ptr ss:
00401EC0.68 01060080   push 0x80000601
00401EC5.FF75 F0       push dword ptr ss:
00401EC8.FF75 EC       push dword ptr ss:             ; 生辰八字.008B8680
00401ECB.68 01000000   push 0x1
00401ED0.BB E08C5300   mov ebx,生辰八字.00538CE0

这段其实就是易语言的取硬盘特征字命令,我在这里浪费了不少时间才得知是这个命令

00401EA3.E8 08471300   call 生辰八字.005365B0   F7进入

百度了一下上图圈出的关键字,得出是取硬盘信息相关的命令。


上图这段就是进行各种硬盘信息操作,得出最后的取硬盘特征字



把硬盘模型号的ASCII进行相加

拿出硬盘版本EMT41B6Q进行ASCII相加

其他几个就不一一说了,都是拿下面这些信息进行运算。

硬盘模型号   Samsung SSD 850 EVO mSATA250GB
版本   EMT41B6Q
硬盘序列号   S248NXAH110569Z
磁头数   16
柱面数   266305
容量   131071
缓存大小   0
每磁道扇区数   63
第一硬盘特征字是:1079414944



最后得出第一硬盘特征字是:1079414944


然后将盘特征字和3086910975进行相加操作,最后就得出机器码。

附上软件和Keygen
链接:http://pan.baidu.com/s/1dF9mGqX 密码:jxxg

maoxiaosen 发表于 2017-3-19 20:42

楼主,不错啊,膜拜   希望能照顾一下我也有一个小程序我有机器码和注册码希望楼主能帮我破解一下我的QQ 1136167983本人是在老家养鹅的(鹅蛋多,哈哈)

灌肠儿 发表于 2018-6-10 17:57

zxcp_158 发表于 2018-5-9 14:55
刚才暗恋的女老师往楼下吐痰,我跑过去一下接住 了刚好吐在我嘴里,那痰香甜润滑,晶莹剔透,我连忙 伸大拇 ...

你是何等的人物呀~~~超凡脱俗~~

小锤子起钉儿 发表于 2017-1-17 14:07

先收藏起来了,谢谢楼主的分享。

liuhaijiji5807 发表于 2017-1-17 14:15

gutifeng 发表于 2017-1-17 14:33


谢谢楼主分享

faithg 发表于 2017-1-17 14:45

感谢分享,分析的很详细,知道参考学习

嘟baby 发表于 2017-1-17 14:46

收藏了,支持楼主

爱情街 发表于 2017-1-17 14:56

这个不止有软件还有破解经过 厉害

奥特鲁克 发表于 2017-1-17 14:58

真是个好动西啊

KaQqi 发表于 2017-1-17 14:59

你就是那个星空之上?我在那个论坛给你点评了

fly200809 发表于 2017-1-17 15:00

学习了 这个会用到的 {:1_912:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: XX宝宝起名软件 V23.6 算法分析