004265AC|.^\7>\jlshort<loc_426564>
循环块(二)和循环块(三)里,根据2-17位注册码计算出25-40位的注册码。
循环结构的理解,是初学算法分析的难点。参见《加密和解密II》P37。
这方面科班生应该没有问题。
在循环结构的直观理解上,个人认为OD比IDA有优势。
由于这是提高篇,我没有逐句地给出注释,也算给软件作者面子了。
7.局部的注册标志,关键变量:
004264E1|>\807D>cmpbyteptr[ebp-29],0;注册标志
004264E50F84>je004265AE
找到的命令
地址反汇编注释
0042632Cmovbyteptr[ebp-29],0
004264D2movbyteptr[ebp-29],0(初始CPU选择)
0042659Fmovbyteptr[ebp-29],0
004265B7movbyteptr[ebp-29],0
0046758Emovbyteptr[ebp-29],0
00426483|.C645>movbyteptr[ebp-29],1;12F96B=1注册标志
找到的命令
地址反汇编注释
00426483movbyteptr[ebp-29],1(初始CPU选择)
004675A2movbyteptr[ebp-29],1
8.全局注册标志:
00427F9D|.8882>movbyteptr[edx+3E4],al;为注册标志
00427FBA|.80B9>cmpbyteptr[ecx+3E4],0;为注册标志1是注册成功
00427FC1|.0F84>je004281E6;判断注册码的第一个条件跳则出错
00428067|.80B9>cmpbyteptr[ecx+3E4],0;注册标志
0042806E|.0F84>je0042817A
第二十一章关键CALL伪代码
附关键CALL伪代码(类似C语言):
*************************************************
char*__cdeclsub_4262FC()
{
charST10_1_0;//ST10_1@0
char*v1;//eax@1
constchar*v3;//eax@10
intv4;//edx@12
intv5;//edx@19
char*v6;//ST0C_4@24
charv7;//[sp+7Fh][bp-29h]@1
__int16v8;//[sp+90h][bp-18h]@1
signedintv9;//[sp+9Ch][bp-Ch]@1
charv10;//[sp+2Ch][bp-7Ch]@2
_BYTEv11[20];//[sp+2Fh][bp-79h]@2
chardest;//[sp+44h][bp-64h]@10
charv13;//[sp+45h][bp-63h]@10
signedintv14;//[sp+78h][bp-30h]@11
charv15;//[sp+43h][bp-65h]@12
charv16;//[sp+4Dh][bp-5Bh]@12
signedintv17;//[sp+74h][bp-34h]@16
charv18;//[sp+2Eh][bp-7Ah]@17
charv19;//[sp+2Dh][bp-7Bh]@17
charv20;//[sp+0h][bp-A8h]@17
charv21;//[sp+28h][bp-80h]@18
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32335-31.html
不能打无准备之仗
看看能把小米骂倒吗