0x01 IDA
实验环境
推荐使用的环境 | 备注 | |
---|---|---|
操作系统 | Windows 10 | |
编译器 | ||
编译选项 | ||
build版本 | ||
调试器 | IDA |
实验前准备
- 去下载书籍配套资料。
- 用IDA打开。
实验过程
结构体
shift + f9打开Structures窗口,随后按ins键添加一个结构体,D键添加输入(db,dw,dd),A键添加ASCII字符为结构体成员。
到数据处Alt+Q进行应用。
汇编代码区选中结构体数据按T
枚举类型
打开Enums窗口,随后按ins键添加一个枚举类型,N键枚举成员。
M键转换为枚举成员。
IDC解密脚本
auto i,x;
auto size=0x15;
auto key=0x1;
auto from=0x401060;
for(i=0;i<size;i++)
{
x=Byte(from);
x=(x^key);
PatchByte(from,x);
from=from+1;
}
解密结果。
静态分析技术应用实例
1.CrackMe.exe
首先丢进IDA看看
F5反汇编
其实反汇编代码已经能看出来,String2是9981,输入9981即可,或者将汇编的跳转jnz short loc_4010E8nop掉也可以。
2.ReverseMe.exe
看需求:
- 移去 "Okay ...."对话框
- 显示一个MessageBox对话框,上面显示用户输入的字符
- 在显示一个对话框,告知用户输入的正确还是错误
- 将按钮标题改成- reversed - 。
- 是序列号为pediy
按shift + f12看看字符串找到"okay ...."
既然要移除直接jmp到下一指令即可。
用于获取编辑框字符的函数由GetWindowText,GetDlgItemText,在输入表中双击随后ctrl + x查看交叉引用发现地址text:00401223处比较可疑,获取文本后紧接着messagebox弹窗,但是却因为上面的跳转指令jmp eax没有执行,将jmp eaxnop掉就好了。
第三个直接改变字符串就行了
第四个,很显然这里对输入的结果进行了一些处理(Text是我们输入文本),我们要校验可以写在这块区域
1270 开始的汇编伪代码为:
lenth = len(str)
for i in str:
tmp = i
if i == '0' || (i<'0' && i>'9' ):
break
sum += int(tmp)
sum = (sum << 20)
sum += lenth
lenth -= 1
if sum == 0:
sum += 1
这是IDA翻译结果
do
{
if ( *result < 48 || (unsigned __int8)*result > 0x39u )
break;
LOBYTE(v6) = *result;
v5 = WindowTextA + ((v6 + v5) << 20);
++result;
--WindowTextA;
if ( !v5 )
v5 = 1;
}
while ( WindowTextA );
随后就是在该区域内写一个简单的字符串比较代码了。
文章评论