专栏名称: 吾爱破解论坛
吾爱破解论坛致力于软件安全与病毒分析的前沿,丰富的技术版块交相辉映,由无数热衷于软件加密解密及反病毒爱好者共同维护,留给世界一抹值得百年回眸的惊艳,沉淀百年来计算机应用之精华与优雅,任岁月流转,低调而奢华的技术交流与探索却
目录
相关文章推荐
猎聘  ·  大厂外包到底值不值得去? ·  昨天  
猎聘  ·  大厂外包到底值不值得去? ·  昨天  
超前一步午后一股  ·  特写 || 量子科技产业链全梳理! ... ·  昨天  
超前一步午后一股  ·  特写 || 量子科技产业链全梳理! ... ·  昨天  
YNTV2都市条形码  ·  昆明这条高速2个路段新增违法抓拍 ·  3 天前  
YNTV2都市条形码  ·  昆明这条高速2个路段新增违法抓拍 ·  3 天前  
看雪学苑  ·  竟长达10年未发现?Ubuntu系统“nee ... ·  5 天前  
奇安信CERT  ·  【已复现】Palo Alto ... ·  1 周前  
51好读  ›  专栏  ›  吾爱破解论坛

生辰八字五行宝宝起名软件 V23.6 算法分析

吾爱破解论坛  · 公众号  · 互联网安全  · 2017-01-20 08:58

正文

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

004A802A /.  55            push ebp                                 ;  注册算法
004A802B |.  8BEC          mov ebp,esp
004A802D |.  81EC 34000000 sub esp,0x34
004A8033 |.  C745 FC 00000>mov[local.1],0x0
004A803A |.  C745 F8 00000>mov[local.2],0x0
004A8041 |.  C745 F4 00000>mov[local.3],0x0
004A8048 |.  6A 01         push 0x1
004A804A |.  B8 ED6F6D00   mov eax,生辰八字.006D6FED                    ;  wenyuhao
004A804F |.  8945 F0       mov [local.4],eax
004A8052 |.  8D45 F0       lea eax,[local.4]
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 [local.1],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 [local.4],eax
004A814C |.  68 04000080   push 0x80000004
004A8151 |.  6A 00         push 0x0
004A8153 |.  8B45 F0       mov eax,[local.4]
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 [local.5]
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 [local.6],eax
004A81A2 |.  8B5D EC       mov ebx,[local.5]
004A81A5 |.  85DB          test ebx,ebx

“Pass=”和假码合并

pass='123456789'

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

004A8234 |.  83C4 04       add esp,0x4
004A8237 |>  58            pop eax
004A8238 |.  8945 F8       mov [local.2],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 [local.4],eax
004A8254 |.  68 04000080   push 0x80000004
004A8259 |.  6A 00         push 0x0
004A825B |.  8B45 F0       mov eax,[local.4]
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 [local.5]
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 [local.6],eax
004A82AA |.  8B5D EC       mov ebx,[local.5]
004A82AD |.  85DB          test ebx,ebx
继续“Pass=”和假码合并
pass='123456789'


----------------------------------------------


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

我这里的机器码为:2018682084


004A8368 |.  83C4 10       add esp,0x10
004A836B |.  8945 E4       mov [local.7],eax
004A836E |.  8955 E8       mov [local.6],edx
004A8371 |.  DF6D E4       fild qword ptr ss:[ebp-0x1C]
004A8374 |.  DD5D E4       fstp qword ptr ss:[ebp-0x1C]
004A8377 |.  DD45 E4       fld qword ptr ss:[ebp-0x1C]
004A837A |.  DC0D 09C46300 fmul qword ptrds:[0x63C409]             ;  机器码×323    注意这里的操作都是以10进制操作
004A8380 |.  DD5D DC       fstp qword ptr ss:[ebp-0x24]
004A8383 |.  68 01060080   push 0x80000601
004A8388 |.  FF75 E0       push [local.8]
004A838B |.  FF75 DC       push [local.9]
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 [local.11],eax


经典的易语言文本比较

004A83D0 |.  83C4 10       add esp,0x10
004A83D3 |.  8945 D0       mov [local.12],eax
004A83D6 |.  8B45 D4       mov eax,[local.11]
004A83D9 |.  50            push eax
004A83DA |.  FF75 D0       push [local.12]
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 [local.13],eax
004A83F3 |.  8B5D D0       mov ebx,[local.12]
004A83F6 |.  85DB          test ebx,ebx


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

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


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

刚才叫大家记下这个全局变量[0x8AC3D4]

现在我们搜索这个常量


全部都下上断点

00401F16  .  5E            pop esi                                  ;  057ACA30
00401F17  .  8BF8          mov edi,eax
00401F19  .  F3:A4         rep movs byte ptr es:[edi],byte ptrds:[>
00401F1B  >  50            push eax
00401F1C  .  8B1D D4C38A00 mov ebx,dword ptrds:[0x8AC3D4]
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:[0x8AC3CC]
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:[0x8AC3CC]
00401E0D  .  83C3 08       add ebx,0x8
00401E10  .  895D FC       mov dword ptr ss:[ebp-0x4],ebx
00401E13  .  68 04000080   push 0x80000004
00401E18  .  6A 00         push 0x0
00401E1A  .  8B5D FC       mov ebx,dword ptr ss:[ebp-0x4]
00401E1D  .  8B03          mov eax,dword ptr ds:[ebx]
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:[ebp-0xC],eax
00401E6C  .  8B5D F8       mov ebx,dword ptr ss:[ebp-0x8]
00401E6F  .  85DB          test ebx,ebx                             ;  生辰八字.005DE620

将硬盘序列号进行MD5操作  



00401E93  > \58            pop eax
00401E94  .  A3 D0C38A00   mov dword ptr ds:[0x8AC3D0],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:[ebp-0xC],eax
00401EAE  .  DB45 F4       fild dword ptr ss:[ebp-0xC]
00401EB1  .  DD5D F4       fstp qword ptr ss:[ebp-0xC]
00401EB4  .  DD45 F4       fld qword ptr ss:[ebp-0xC]
00401EB7  .  DC05 F2C36300 fadd qword ptrds:[0x63C3F2]
00401EBD  .  DD5D EC       fstp qword ptr ss:[ebp-0x14]
00401EC0  .  68 01060080   push 0x80000601
00401EC5  .  FF75 F0       push dword ptr ss:[ebp-0x10]
00401EC8  .  FF75 EC       push dword ptr ss:[ebp-0x14]             ; 生辰八字.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
链接:https://share.weiyun.com/89dd392ddbbb753f64c10dcb21a7e758 (密码:NYXK9I)


--官方论坛

www.52pojie.cn

--推荐给朋友

公众微信号:吾爱破解论坛

或搜微信号:pojie_52