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