您的位置:首页精文荟萃破解文章 → 蜗牛数学一年级

蜗牛数学一年级

时间:2004/10/15 1:03:00来源:本站整理作者:蓝点我要评论(2)

 对象::蜗牛数学一年级.exe
下载http://xz.onlinedown.net/down/wn1.rar
工具:ollydbg1.08b
w32dasm v10.0
这个程序比较的麻烦,因为,算法在不同的两个地方,

算法分析过程

首先脱壳

用w32Dasm反一下,

找到字符串“注册成功”

作如下分析

==================================================================================

:004FCDC8 8BD8 mov ebx, eax
:004FCDCA 33C0 xor eax, eax 我在这里下断
:004FCDCC 55 push ebp

省掉M行代码

:004FCE67 8B15C48B5000 mov edx, dword ptr [00508BC4]
:004FCE6D 8B12 mov edx, dword ptr [edx]
:004FCE6F 8B9254040000 mov edx, dword ptr [edx+00000454] 一直往上看
:004FCE75 E81A7FF0FF call 00404D94                关键call
:004FCE7A 757C jne 004FCEF8              关键跳转
:004FCE7C 6A00 push 00000000
:004FCE7E 668B0D2CCF4F00 mov cx, word ptr [004FCF2C]
:004FCE85 B202 mov dl, 02

* Possible StringData Ref from Code Obj ->" 注册成功! 感谢您的使用,有问题

请E-mai"
->"l给我或通过聊天工具联系。"
|
:004FCE87 B838CF4F00 mov eax, 004FCF38
:004FCE8C E89396F3FF call 00436524

==================================================================================

好了,运行OD
下断,注册拦住了,分析如下

==================================================================================

004FCDCA |. 33C0 XOR EAX,EAX
004FCDCC |. 55 PUSH EBP
004FCDCD |. 68 1BCF4F00 PUSH unpacked.004FCF1B
004FCDD2 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004FCDD5 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004FCDD8 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
004FCDDB |. 8B83 680300>MOV EAX,DWORD PTR DS:[EBX+368]
004FCDE1 |. E8 EA9BF6FF CALL unpacked.004669D0 ; 取第一格注册码
004FCDE6 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ;  

13BD0F0是注册码第一部份,存入

004FCDE9 |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]
004FCDEE |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004FCDF0 |. 05 48040000 ADD EAX,448 ; eax是上一次输入的注册码,无聊
004FCDF5 |. E8 D27BF0FF CALL unpacked.004049CC
004FCDFA |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004FCDFD |. 8B83 6C0300>MOV EAX,DWORD PTR DS:[EBX+36C]
004FCE03 |. E8 C89BF6FF CALL unpacked.004669D0 ; 取第二格注册码
004FCE08 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ;  

13A8860是注册码第二部分,再存入  

004FCE0B |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]
004FCE10 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004FCE12 |. 05 4C040000 ADD EAX,44C ; eax是上一次输入的注册码,无聊
004FCE17 |. E8 B07BF0FF CALL unpacked.004049CC
004FCE1C |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004FCE1F |. 50 PUSH EAX
004FCE20 |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]
004FCE25 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004FCE27 |. 8B88 4C0400>MOV ECX,DWORD PTR DS:[EAX+44C] ; ecx取第二格的假注册码  
004FCE2D |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4] ; 作者神经病
004FCE32 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; 作者神经病
004FCE34 |. 8B90 480400>MOV EDX,DWORD PTR DS:[EAX+448] ; edx取第一格的假注册码  
004FCE3A |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4] ; 作者神经病
004FCE3F |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; 作者神经病
004FCE41 |. E8 DE1F0000 CALL unpacked.004FEE24 ; 算法call,把假注册码进行计算。一定要

跟进  


004FCE46 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 返回假注册码算好后的数2210230840
004FCE49 |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]
004FCE4E |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004FCE50 |. 05 54040000 ADD EAX,454
004FCE55 |. E8 727BF0FF CALL unpacked.004049CC
004FCE5A |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]
004FCE5F |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004FCE61 |. 8B80 500400>MOV EAX,DWORD PTR DS:[EAX+450] ; 取入机器码运算后的值
004FCE67 |. 8B15 C48B50>MOV EDX,DWORD PTR DS:[508BC4] ; 这时d:eax,把这个机器码运算后的值的

内存地址记下来,地址为13BB49C 这个数值非常重要,整个破解就靠这个地址了。


004FCE6D |. 8B12 MOV EDX,DWORD PTR DS:[EDX]
004FCE6F |. 8B92 540400>MOV EDX,DWORD PTR DS:[EDX+454] ; 取入运算后的假注册码
004FCE75 |. E8 1A7FF0FF CALL unpacked.00404D94 ; 这里就是比较的call了,哈哈。
004FCE7A |. 75 7C JNZ SHORT unpacked.004FCEF8 ; 最后决定性跳转
004FCE7C |. 6A 00 PUSH 0 ; /Arg1 = 00000000
004FCE7E |. 66:8B0D 2CC>MOV CX,WORD PTR DS:[4FCF2C] ; |
004FCE85 |. B2 02 MOV DL,2 ; |
004FCE87 |. B8 38CF4F00 MOV EAX,unpacked.004FCF38 ; |
004FCE8C |. E8 9396F3FF CALL unpacked.00436524 ; \unpacked.00436524
004FCE91 |. A1 C48B5000 MOV EAX,DWORD PTR DS:[508BC4]


==================================================================================

好了,跟进那个算法call

==================================================================================

004FEE24 /$ 55 PUSH EBP
004FEE25 |. 8BEC MOV EBP,ESP
004FEE27 |. 6A 00 PUSH 0
004FEE29 |. 6A 00 PUSH 0
004FEE2B |. 6A 00 PUSH 0
004FEE2D |. 6A 00 PUSH 0
004FEE2F |. 6A 00 PUSH 0
004FEE31 |. 6A 00 PUSH 0
004FEE33 |. 53 PUSH EBX
004FEE34 |. 56 PUSH ESI
004FEE35 |. 57 PUSH EDI
004FEE36 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX ; 存第二格入12f42cR SS:
004FEE39 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ; 存第一格入12f430R SS:
004FEE3C |. 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8] ; 存入地址12f458内为空
004FEE3F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 存第一格入eaxWORD
004FEE42 |. E8 F15FF0FF CALL unpacked.00404E38 ; 返回edx=3ac
004FEE47 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 存第二格入eaxWORD
004FEE4A |. E8 E95FF0FF CALL unpacked.00404E38
004FEE4F |. 33C0 XOR EAX,EAX ; 清0
004FEE51 |. 55 PUSH EBP
004FEE52 |. 68 8CEF4F00 PUSH unpacked.004FEF8C
004FEE57 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004FEE5A |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004FEE5D |. 8BC7 MOV EAX,EDI
004FEE5F |. E8 145BF0FF CALL unpacked.00404978
004FEE64 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004FEE67 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ; 13bbb84为第一格
004FEE6A |. E8 A15BF0FF CALL unpacked.00404A10 ; 返回ecx为4
004FEE6F |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; 13bbb84为第一格
004FEE72 |. E8 D15DF0FF CALL unpacked.00404C48 ; 返回eax为4
004FEE77 |. 8BF0 MOV ESI,EAX
004FEE79 |. 85F6 TEST ESI,ESI
004FEE7B |. 7E 47 JLE SHORT unpacked.004FEEC4 ; 你爷的,搞半天是测试位数acked.004FEE
004FEE7D |. BB 01000000 MOV EBX,1
004FEE82 |> 8B45 F4 /MOV EAX,DWORD PTR SS:[EBP-C] ; 转换字符开始
004FEE85 |. 8A4418 FF |MOV AL,BYTE PTR DS:[EAX+EBX-1] ; 依次存入字符到al
004FEE89 |. 3C 50 |CMP AL,50 ; 跟50比跟字符'P'
004FEE8B |. 75 0F |JNZ SHORT unpacked.004FEE9C ; 不相等则跳到跟字符Y比
004FEE8D |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
004FEE90 |. E8 0B60F0FF |CALL unpacked.00404EA0
004FEE95 |. C64418 FF 3>|MOV BYTE PTR DS:[EAX+EBX-1],30 ; 等于P换成0
004FEE9A |. EB 24 |JMP SHORT unpacked.004FEEC0 ; 进行下一位比较转换 unpacked
004FEE9C |> 3C 59 |CMP AL,59 ; 跟59比跟字符'Y'
004FEE9E |. 75 0F |JNZ SHORT unpacked.004FEEAF ; 不相等则跳到跟字符W比
004FEEA0 |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
004FEEA3 |. E8 F85FF0FF |CALL unpacked.00404EA0
004FEEA8 |. C64418 FF 3>|MOV BYTE PTR DS:[EAX+EBX-1],31 ; 等于Y换成1
004FEEAD |. EB 11 |JMP SHORT unpacked.004FEEC0 ; 进行下一位比较转换 unpacked
004FEEAF |> 3C 57 |CMP AL,57 ; 跟57比跟字符'W'
004FEEB1 |. 75 0D |JNZ SHORT unpacked.004FEEC0 ; 不相等则比较下位字符
004FEEB3 |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
004FEEB6 |. E8 E55FF0FF |CALL unpacked.00404EA0
004FEEBB |. C64418 FF 3>|MOV BYTE PTR DS:[EAX+EBX-1],32 ; 等于W换成2
004FEEC0 |> 43 |INC EBX
004FEEC1 |. 4E |DEC ESI
004FEEC2 |.^75 BE \JNZ SHORT unpacked.004FEE82 ; 转换字符结束
004FEEC4 |> 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004FEEC7 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; 存入第一格到ecx
004FEECA |. BA A4EF4F00 MOV EDX,unpacked.004FEFA4 ; edx存入"$"字符
004FEECF |. E8 C05DF0FF CALL unpacked.00404C94
004FEED4 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; Eax和13a8860变为"$5656"
004FEED7 |. 33D2 XOR EDX,EDX ; 清除edxX,
004FEED9 |. E8 9AA8F0FF CALL unpacked.00409778 ; 返回eax"5656",Ecx"$5656"
004FEEDE |. 8BD7 MOV EDX,EDI
004FEEE0 |. E8 1BA7F0FF CALL unpacked.00409600 ; 第一格算法,我这里返回5位数22102
                               一定要跟进去,关键的关键啊
                       
004FEEE5 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] ; 存入第一格X,DWO
004FEEE8 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; 存入第二格X,DWO
004FEEEB |. E8 205BF0FF CALL unpacked.00404A10 ; 返回ecx等于3cked
004FEEF0 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; 13bd0f0为第二格7878
004FEEF3 |. E8 505DF0FF CALL unpacked.00404C48 ; 返回eax为4ack
004FEEF8 |. 8BF0 MOV ESI,EAX
004FEEFA |. 85F6 TEST ESI,ESI
004FEEFC |. 7E 47 JLE SHORT unpacked.004FEF45
004FEEFE |. BB 01000000 MOV EBX,1
004FEF03 |> 8B45 F4 /MOV EAX,DWORD PTR SS:[EBP-C] ;  

      以下代码与第一格的一模一样,包括算法都一模一样,用同一个算法程序

==================================================================================

再跟进那个算法call里,代码如下.

004095B4 /$ 08C9 OR CL,CL
004095B6 |. 75 17 JNZ SHORT unpacked.0040>
004095B8 |. 09C0 OR EAX,EAX ; 无聊啊,就是他自己啊
004095BA |. 79 0E JNS SHORT unpacked.0040>
004095BC |. F7D8 NEG EAX
004095BE |. E8 07000000 CALL unpacked.004095CA
004095C3 |. B0 2D MOV AL,2D
004095C5 |. 41 INC ECX
004095C6 |. 4E DEC ESI
004095C7 |. 8806 MOV BYTE PTR DS:[ESI],A>
004095C9 |. C3 RETN
004095CA |$ B9 0A000000 MOV ECX,0A
004095CF |> 52 PUSH EDX
004095D0 |. 56 PUSH ESI
004095D1 |> 31D2 /XOR EDX,EDX
004095D3 |. F7F1 |DIV ECX ; 字符数值除以0A(整除余数在edx
004095D5 |. 4E |DEC ESI
004095D6 |. 80C2 30 |ADD DL,30 ; dl加上30,3
004095D9 |. 80FA 3A |CMP DL,3A ; 跟3A比,主要是保证dl里是数字  
004095DC |. 72 03 |JB SHORT unpacked.0040>
004095DE |. 80C2 07 |ADD DL,7
004095E1 |> 8816 |MOV BYTE PTR DS:[ESI],>; 把dl移到11fcbf
004095E3 |. 09C0 |OR EAX,EAX
004095E5 |.^75 EA \JNZ SHORT unpacked.004>;  
总结,除以0A取余加30变成数字,直到eax等于0D1]FEFFD8]

004095E7 |. 59 POP ECX ; 其实等效于十六进制变为十进制  
004095E8 |. 5A POP EDX
004095E9 |. 29F1 SUB ECX,ESI
004095EB |. 29CA SUB EDX,ECX
004095ED |. 76 10 JBE SHORT unpacked.0040

=======================================================================================

好了,我们应该知道了,程序把我们输入的值变成十进制数跟一个值比,而这个值一定跟机器码有关。
而这个运算,在我们跟踪时没有发现运算痕迹,
初步猜测可能在运行时就运算了,而我们唯一的线索就是我刚才叫你们记下的那个值的地址13BB49C

所以,我只能注意这个地址了,

于是我一直跟踪,花了好多时间,终于找到了,下面这段程序。

这个程序就是麻烦在这里


=======================================================================================


004FEC21 |. 75 12 JNZ SHORT unpacked.004F>
004FEC23 |. 8B45 FC MOV EAX,DWORD PTR SS:[E>
004FEC26 |. 05 44040000 ADD EAX,444 ; 哈哈,下面这个字符串就是机器码了 P-4]]FEFF
004FEC2B |. BA 10EE4F00 MOV EDX,unpacked.004FEE>; ASCII "661023D"
004FEC30 |. E8 975DF0FF CALL unpacked.004049CC
004FEC35 |> 8B45 FC MOV EAX,DWORD PTR SS:[E>; 返回机器码地址13a8860
004FEC38 |. 8B88 440400>MOV ECX,DWORD PTR DS:[E>; 返回机器码地址13a8860
004FEC3E |. 8B45 FC MOV EAX,DWORD PTR SS:[E>
004FEC41 |. 05 44040000 ADD EAX,444 ; 神经病,又入机器码到eax
004FEC46 |. BA 20EE4F00 MOV EDX,unpacked.004FEE>; 字符"P",哈哈明白了吧,怎样练成机器码的E>0-4]4]EFFD8]
004FEC4B |. E8 4460F0FF CALL unpacked.00404C94
004FEC50 |. 8D45 F8 LEA EAX,DWORD PTR SS:[E>
004FEC53 |. E8 205DF0FF CALL unpacked.00404978
004FEC58 |. 8B45 FC MOV EAX,DWORD PTR SS:[E>
004FEC5B |. 8B80 440400>MOV EAX,DWORD PTR DS:[E>; 切,终于练成(P661-023D)机器码13BA9944]EFFD8]
004FEC61 |. E8 E25FF0FF CALL unpacked.00404C48 ; 返回机器码长度8入EAX.
004FEC66 |. 8BF0 MOV ESI,EAX ; 肯定有行动了,才入esi
004FEC68 |. 85F6 TEST ESI,ESI ; 测测是不是空的,我晕死
004FEC6A |. 7E 6B JLE SHORT unpacked.004F>
004FEC6C |. BB 01000000 MOV EBX,1 ; 哈哈,肯定是运算开始了
004FEC71 |> 8B45 FC /MOV EAX,DWORD PTR SS:[>; 拷,地址换算X,DWOR
004FEC74 |. 8B80 440400>|MOV EAX,DWORD PTR DS:[>; 移入机器码AX,DW
004FEC7A |. 8A4418 FF |MOV AL,BYTE PTR DS:[EA>
004FEC7E |. 04 D0 |ADD AL,0D0 ; 字符值加上0d0D0
004FEC80 |. 2C 0A |SUB AL,0A ; 减掉0a
004FEC82 |. 73 28 |JNB SHORT unpacked.004>; 当且仅当(SF XOR OF)=1时,也就是看是否是字母1]FFD8]
004FEC84 |. 8D85 E8FFFE>|LEA EAX,DWORD PTR SS:[>; 以下是上面条件不成立的算法  
004FEC8A |. 8B55 FC |MOV EDX,DWORD PTR SS:[>; 拷,地址换算
004FEC8D |. 8B92 440400>|MOV EDX,DWORD PTR DS:[>; 移入机器码到edxW
004FEC93 |. 8A541A FF |MOV DL,BYTE PTR DS:[ED>; 移入字符到dl
004FEC97 |. E8 C45EF0FF |CALL unpacked.00404B60
004FEC9C |. 8B95 E8FFFE>|MOV EDX,DWORD PTR SS:[>
004FECA2 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[>
004FECA5 |. E8 A65FF0FF |CALL unpacked.00404C50 ; 返回edx为原字符
004FECAA |. EB 27 |JMP SHORT unpacked.004>; 第二种情况结束,也就是如果是数字则不变004>ECD3]FEFFE8]
004FECAC |> 8B45 FC |MOV EAX,DWORD PTR SS:[>; 第一种情况的算法,即如果是字母
004FECAF |. 8B80 440400>|MOV EAX,DWORD PTR DS:[>
004FECB5 |. 0FB64418 FF |MOVZX EAX,BYTE PTR DS:>
004FECBA |. 8D95 E4FFFE>|LEA EDX,DWORD PTR SS:[>
004FECC0 |. E8 3BA9F0FF |CALL unpacked.00409600 ; 字母变成数字的算法啊
004FECC5 |. 8B95 E4FFFE>|MOV EDX,DWORD PTR SS:[>; p变成80
004FECCB |. 8D45 F8 |LEA EAX,DWORD PTR SS:[>
004FECCE |. E8 7D5FF0FF |CALL unpacked.00404C50 ; 这个call也要跟返回ecx为2404C5
004FECD3 |> 43 |INC EBX
004FECD4 |. 4E |DEC ESI
004FECD5 |.^75 9A \JNZ SHORT unpacked.004>; 算好后值为(P)80661-02368(D)>EC71
004FECD7 |> 8D45 F4 LEA EAX,DWORD PTR SS:[E>
004FECDA |. 8B55 F8 MOV EDX,DWORD PTR SS:[E>; 引入算好后的地址13bb620[8066102368]]FEFFE4]
004FECDD |. E8 2E5DF0FF CALL unpacked.00404A10
004FECE2 |. 8D45 F8 LEA EAX,DWORD PTR SS:[E>; 引入算好后的地址13bb620[8066102368]]FEFFE4]
004FECE5 |. E8 8E5CF0FF CALL unpacked.00404978
004FECEA |. 8B45 F4 MOV EAX,DWORD PTR SS:[E>; 引入算好后的地址13bb620[8066102368]]FEFFE4]
004FECED |. E8 565FF0FF CALL unpacked.00404C48 ; 返回算好后值的长度到eax00404C48
004FECF2 |. 8BD8 MOV EBX,EAX ; 再移到ebx,EA
004FECF4 |. 83FB 01 CMP EBX,1 ; 跟1比EB
004FECF7 |. 7C 25 JL SHORT unpacked.004FE>
004FECF9 |> 8D85 E0FFFE>/LEA EAX,DWORD PTR SS:[>
004FECFF |. 8B55 F4 |MOV EDX,DWORD PTR SS:[>; 引入算好后的地址13bb620[8066102368]]FEFFE0]
004FED02 |. 8A541A FF |MOV DL,BYTE PTR DS:[ED>; 依次移入算好后的字符E PTR DS:[
004FED06 |. E8 555EF0FF |CALL unpacked.00404B60
004FED0B |. 8B95 E0FFFE>|MOV EDX,DWORD PTR SS:[>
004FED11 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[>
004FED14 |. E8 375FF0FF |CALL unpacked.00404C50
004FED19 |. 4B |DEC EBX
004FED1A |. 85DB |TEST EBX,EBX ; 总结,根本就是首尾换位而已 BP-
004FED1C |.^75 DB \JNZ SHORT unpacked.004>; 完成后,变为8632016608地址在13bb7bc9]FEFFE0]
004FED1E |> 8D45 F4 LEA EAX,DWORD PTR SS:[E>
004FED21 |. 8B55 F8 MOV EDX,DWORD PTR SS:[E>; 移入算后的8632016608地址在13bb7bc8]]FEFFE
004FED24 |. E8 E75CF0FF CALL unpacked.00404A10
004FED29 |. 8D45 F8 LEA EAX,DWORD PTR SS:[E>
004FED2C |. E8 475CF0FF CALL unpacked.00404978
004FED31 |. 8B45 F4 MOV EAX,DWORD PTR SS:[E>; 移入算后的8632016608地址在13bb7bcC]]FEFFE
004FED34 |. E8 0F5FF0FF CALL unpacked.00404C48 ; 又取出该值的长度到eax.00404C48
004FED39 |. 8BF0 MOV ESI,EAX
004FED3B |. 85F6 TEST ESI,ESI ; 不能为0啊SI,E
004FED3D |. 7E 74 JLE SHORT unpacked.004F>
004FED3F |. BB 01000000 MOV EBX,1 ; 唉,还算,作者好无聊啊。 D
004FED44 |> 8B45 F4 /MOV EAX,DWORD PTR SS:[>; 头晕啊,又要算了DWORD PT
004FED47 |. 807C18 FF 3>|CMP BYTE PTR DS:[EAX+E>; 跟字符0比啊TE PT
004FED4C |. 75 22 |JNZ SHORT unpacked.004>; 不等于0则跳到4FED70acked.
004FED4E |. 8D85 DCFFFE>|LEA EAX,DWORD PTR SS:[>; 等于需则用第二种算WORD PTR
004FED54 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[>
004FED57 |. 8A541A FF |MOV DL,BYTE PTR DS:[ED>
004FED5B |. E8 005EF0FF |CALL unpacked.00404B60
004FED60 |. 8B95 DCFFFE>|MOV EDX,DWORD PTR SS:[>
004FED66 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[>; 说白了,如果等于0还是0啊 PTR SS:[>B
004FED69 |. E8 E25EF0FF |CALL unpacked.00404C50
004FED6E |. EB 3F |JMP SHORT unpacked.004>
004FED70 |> 8D85 D4FFFE>|LEA EAX,DWORD PTR SS:[>; 开始第一种算X,DWOR
004FED76 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[>
004FED79 |. 8A541A FF |MOV DL,BYTE PTR DS:[ED>; 再次移入dl成偏移地址 PTR DS:[
004FED7D |. E8 DE5DF0FF |CALL unpacked.00404B60
004FED82 |. 8B85 D4FFFE>|MOV EAX,DWORD PTR SS:[>; 字符再入eax,DWO
004FED88 |. E8 AFA9F0FF |CALL unpacked.0040973C ; 返回eax为字符,ecx为地址040973C B
004FED8D |. 50 |PUSH EAX ; 压入SH
004FED8E |. B8 0A000000 |MOV EAX,0A ; eax=0a
004FED93 |. 5A |POP EDX ; 弹出,即edx=字符8
004FED94 |. 2BC2 |SUB EAX,EDX ; 把eax减去edxDX
004FED96 |. 8D95 D8FFFE>|LEA EDX,DWORD PTR SS:[>
004FED9C |. E8 5FA8F0FF |CALL unpacked.00409600
004FEDA1 |. 8B95 D8FFFE>|MOV EDX,DWORD PTR SS:[>
004FEDA7 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[>
004FEDAA |. E8 A15EF0FF |CALL unpacked.00404C50 ; 第一种说白了就是10减去原数啊0404C50 BP-8]
004FEDAF |> 43 |INC EBX
004FEDB0 |. 4E |DEC ESI
004FEDB1 |.^75 91 \JNZ SHORT unpacked.004>; 总结:逐位用10来减啊,如果为0则还是0啊4>ED44]FEFFD8]
004FEDB3 |> 8B45 FC MOV EAX,DWORD PTR SS:[E>
004FEDB6 |. 05 50040000 ADD EAX,450
004FEDBB |. 8B55 F8 MOV EDX,DWORD PTR SS:[E>
004FEDBE |. E8 095CF0FF CALL unpacked.004049CC
004FEDC3 \. C3 RETN

==============================================================================================

004095B4 /$ 08C9 OR CL,CL
004095B6 |. 75 17 JNZ SHORT unpacked.0040>
004095B8 |. 09C0 OR EAX,EAX ; 无聊啊,这里的算法,跟刚才的一样啊。晕死。
                         只不过,刚才的是整个字符串,现在是一个字符。

004095BA |. 79 0E JNS SHORT unpacked.0040>
004095BC |. F7D8 NEG EAX
004095BE |. E8 07000000 CALL unpacked.004095CA
004095C3 |. B0 2D MOV AL,2D
004095C5 |. 41 INC ECX
004095C6 |. 4E DEC ESI
004095C7 |. 8806 MOV BYTE PTR DS:[ESI],A>
004095C9 |. C3 RETN
004095CA |$ B9 0A000000 MOV ECX,0A
004095CF |> 52 PUSH EDX
004095D0 |. 56 PUSH ESI
004095D1 |> 31D2 /XOR EDX,EDX
004095D3 |. F7F1 |DIV ECX ; 字母的ASCII除以0A(整除余数在edx)  
004095D5 |. 4E |DEC ESI
004095D6 |. 80C2 30 |ADD DL,30 ; dl加上30,3
004095D9 |. 80FA 3A |CMP DL,3A ; 跟3A比,主要是保证dl里是数字  
004095DC |. 72 03 |JB SHORT unpacked.0040>
004095DE |. 80C2 07 |ADD DL,7
004095E1 |> 8816 |MOV BYTE PTR DS:[ESI],>; 把dl移到11fcbfR D
004095E3 |. 09C0 |OR EAX,EAX
004095E5 |.^75 EA \JNZ SHORT unpacked.004>; 总结,除以0A取余加30变成数字,直到eax等于0D1]FEFFD8]
004095E7 |. 59 POP ECX ; 其实等效于字母的ASCII值变为十进制 于0D1]FEFFD
004095E8 |. 5A POP EDX
004095E9 |. 29F1 SUB ECX,ESI
004095EB |. 29CA SUB EDX,ECX
004095ED |. 76 10 JBE SHORT unpacked.0040>

===========================================================================================

好了,终于好了,
现在你们自己总结吧,
我的机器码是

P661-023D
经过算法后是
注册码是
60CC 170C2 
    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程