发布时间:2023-12-17 来源:win7旗舰版 浏览量:
网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。 对象::蜗牛数学一年级.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 网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。 |
对象::蜗牛数学一年级.exe 下载http://xz.onlinedown.net/down/w