汇编语言与逆向工程实验报告 7

文件信息

首先看一下文件信息

image-20240408205656506

可以看到是 32 位程序

静态分析

定位到关键函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int __cdecl check(char *Str)
{
char Buffer; // [esp+1Bh] [ebp-Dh] BYREF
size_t i; // [esp+1Ch] [ebp-Ch]
int v4; // [esp+20h] [ebp-8h]
int v5; // [esp+24h] [ebp-4h] BYREF

v4 = 0;
for ( i = 0; i < strlen(Str); ++i )
{
Buffer = Str[i];
sscanf(&Buffer, "%d", &v5);
v4 += v5;
if ( v4 == 15 )
{
printf("Password OK!\n");
exit(0);
}
}
return printf("Password Incorrect!\n");
}

可以看到函数 check 接收一个字符串 Str 作为参数,然后循环遍历字符串,将每个字符转换为整数,并累加到变量 v4 中。如果 v4 等于 15,则打印 Password OK! 并退出程序,否则打印 Password Incorrect! 并返回。

动态调试

找到 password ok 字符串

image-20240408210918661

函数改成 jne 改成 je,意思就是把原来的输出错误的条件改成输出正确的条件,这样就会一直输出 OK

image-20240408210951100

打补丁导出

image-20240408211123589

实现任意输入都输出 password ok

相关链接

[原创]x64dbg 使用记录:开始调试并修改一个程序

x64dbg 入门系列(二)-搜索字符串

[x64dbg] 实战 01 - 参数打印/修改参数内容(条件断点、命令、脚本)

x32dbg/x64dbg 修改后如何保存到 exe

x86 汇编JE、JNE、JCXZ 和 JECXZ 指令笔记_34