准备知识
汇编指令
在分析程序之前,先掌握几个指令
-
test:相当于and指令,用来判断该值是否为0
-
je指令:又叫做Jump if Equal,如果Z标志位为1,那么则跳转,意思就是,如果为0那么跳转
mov eax,0;
test eax,eax;
je xxxx; eax为0,那么跳转
xxxx:
[代码]
-
jl指令:Jump if Less,即如果比较结果是小于,则跳转
mov eax, 10
mov ebx, 20
cmp eax, ebx
jl less_than_label ; 如果 eax 小于 ebx,则跳转到 less_than_label
; 这里是 less_than_label 处的代码
less_than_label:
; 这里是跳转之后执行的代码
-
jle指令:Jump if Less or Equal,即如果比较结果是小于或等于
mov eax, 10
mov ebx, 10
cmp eax, ebx
jle less_than_or_equal_label ; 如果 eax 小于等于 ebx,则跳转到 less_than_or_equal_label
; 这里是 less_than_or_equal_label 处的代码
less_than_or_equal_label:
; 这里是跳转之后执行的代码
-
jge指令:Jump if Greater or Equal,即如果比较结果是大于或等于,则跳转
mov eax, 20
mov ebx, 10
cmp eax, ebx
jge greater_than_or_equal_label ; 如果 eax 大于等于 ebx,则跳转到 greater_than_or_equal_label
; 这里是 greater_than_or_equal_label 处的代码
greater_than_or_equal_label:
; 这里是跳转之后执行的代码
if语句
在来简单了解一下if语句的汇编指令
在汇编语句中,如果if是小于,那么汇编指令就是大于等于(jge),如果是大于,那么就是小于等于(jle)。
开始分析
在简单了解了几个指令之后,就可以开始分析下面这段代码了。
其他的就不写了,主要就是这段算法
BOOL GenRegCode( TCHAR *rCode, TCHAR *name ,int len)
{
int i,j;
unsigned long code=0;
for(i=3,j=0;i<len;i++,j++)
{if(j>7) j=0;
code+=((BYTE)name[i])*Table[j];
}
wsprintf(name,TEXT("%ld"),code);
if(lstrcmp(rCode, name)==0) //比较真假序列号,这里为了省事,直接比较了
return TRUE;
else
return FALSE;
}
基础跟我一样不好的,最好是看观察源代码,边分析。
看了前面的笔记应该很清楚,对于这样的编译器编译的可视化窗口如何找入口点,这里就不再累赘了,直接贴图开始找。
往下翻,找到了两个call,也就是GetDlgItemTextA
函数,根据对API的了解,这个就是我们得到我们输入的值的函数。
UINT GetDlgItemTextA(
[in] HWND hDlg,
[in] int nIDDlgItem,
[out] LPSTR lpString,
[in] int cchMax
);
//检索与对话框中的控件关联的标题或文本。
下面已经全都备注好了
而下面,则跟if语句一样:
if(username[0] == 0 || username.length < 5)
{
//类似于这样
}
下面这段调用了一个方法,就是我们上面给的算法。类似于下面这样的代码:
//根据调用约定:
void xxx(password,username,len);
进入函数内部,分析如下:
if(int i=3;len>i;i++){
if(int j =0;j>7;j++){
j = 0;
edx = 0;
ebx = 0;
}
}
根据分析:ebp存放的是:用户名,eax+405030存放的是:一串16进制字符。
后依次取出来之后,相乘在相加。
代码如下:
int i = 0;
if(int i=3,int j =0;len>i;i++,j++){
if(j>7)
j = 0;
i += ((BYTE)name[i]) * ((BYTE)code[j])
}
算法分析完毕。
原文始发于微信公众号(loochSec):加密与解密学习笔记-第一个TraceMe
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论