逆向工程 CM_3 wp

18.9.10 PM 20:23
教师节快乐哈( σ’ω’)σ
今天满满一天课 呼..累呼呼


附上下载链接CM_3.exe

吼的 我们现在打开这个小程序 先观察观察

这里写图片描述
Flag 就在这个窗口里 我听说爆炸物可能会爆炸 没有爆炸 就输入你的密码
如果我们随意输入几个数字的话 他会一直让你输入 直到你输入正确
这里写图片描述

well 我们把它拖到IDA里看一看(一开始直接拖到64位里面去了 反编译的时候发现不行 果然是32位的emm..’(°ー°〃)
直接反编译代码好像得不到什么有用的东西
于是就想到用Shift+F12先看一下字符串 找一下通过的地方的伪代码
这里写图片描述
点进去pass里面
这里写图片描述
发现我们想要的代码段是灰色的 并不能F5查看
于是就想 后面的check faild! 那里会不会和正确答案有关联

那么我们同样的方法打开check faild!部分 用F5查看
这里写图片描述

哇 这时候就可以鸡冻惹~ ([email protected]@)

感觉会有一些发现 我们看到while段 经过判断v6和v5后 就会输出check faild!
可以推测一下其中一个是我们的输入 另一个是正确的输入
点进去sub_4561F3
这里写图片描述
wow 真的是层层嵌套 那就再往里看


18.9.11
 早期的虫儿被鸟吃¯_(౦▾౦ ✿)¯_


这里写图片描述

看到了if里面的v3和a2其实我很想知道这个a2是哪来的 代表什么 于是我们在看那个j__strlen 翻翻翻
这里写图片描述
嗯 看不懂
后来又随便翻了翻
发现翻出的代码要不就是看不懂 要不就是没什么用
真的感觉自己走到了沙漠里 (ノへ`、)

那么
就再重新找条路
我们回到最初的界面
这里写图片描述
看看这个函数里会有啥

等等!我看见了什么!?
这里写图片描述

这个不就是我们要苦苦寻找的flag嘛
感觉这个byte_52E000绘有很大的玄机啊 我们进去看看
这里写图片描述

wow 感觉flag就隐藏在这里了 我们再回到上一界面看一下顺序┌( ´_ゝ` )┐

int sub_45BFF0()
{
char v0; // STF3_1
signed int i; // [esp+DCh] [ebp-64h]
int v3; // [esp+F4h] [ebp-4Ch]
int v4; // [esp+F8h] [ebp-48h]
int v5; // [esp+FCh] [ebp-44h]
int v6; // [esp+100h] [ebp-40h]
int v7; // [esp+104h] [ebp-3Ch]
int v8; // [esp+108h] [ebp-38h]
int v9; // [esp+10Ch] [ebp-34h]
int v10; // [esp+110h] [ebp-30h]
int v11; // [esp+11Ch] [ebp-24h]
int v12; // [esp+120h] [ebp-20h]
int v13; // [esp+124h] [ebp-1Ch]
int v14; // [esp+128h] [ebp-18h]
int v15; // [esp+12Ch] [ebp-14h]
int v16; // [esp+130h] [ebp-10h]
int v17; // [esp+134h] [ebp-Ch]
int v18; // [esp+138h] [ebp-8h]
v11 = 7;
v12 = 3;
v13 = 1;
v14 = 8;
v15 = 7;
v16 = 2;
v17 = 3;
v18 = 2;
v3 = 18;
v4 = 19;
v5 = 20;
v6 = 1;
v7 = 15;
v8 = 20;
v9 = 16;
v10 = 11;
for ( i = 0; i < 8; ++i )
{
 v0 = byte_52E000[*(&v11 + i)];
 byte_52E000[(&v11 + i)] = byte_52E000[(&v3 + i)];
 byte_52E000[*(&v3 + i)] = v0;
}
byte_52E000[21] = 0;
return sub_458430((int)”SYC{%s}\n”, (unsigned int)byte_52E000);
}

这时候我们要自己写一个算法算一下就可以了
list() 方法用于将元组转换为列表。
这里写图片描述
flag出现!
(๐॔˃̶ᗜ˂̶๐॓)

还有一个方法就是用OD直接爆破
Let’s begin!
这里写图片描述
右击 智能搜索 看字符串
找到 check faild!字符串 在它上面的适当位置设置下断点
这里写图片描述
重新加载 F9->F8单步到输入注册码 随便输一个
这里写图片描述

然后我们把下面的跳转改成可执行的 (je->jmp
这里写图片描述
然后进入下面的call F8*n
发现 flag出现 (o≖◡≖)
这里写图片描述

然后我们继续F8单步调试
当我们回头再看我们的运行程序框 发现已经出现了flag
这里写图片描述

呼呼 这样的话还是感觉OD更暴力一点呢哈哈哈哈 ʅ(´◔౪◔)ʃ