原题:http://www.shiyanbar.com/ctf/28
下载一个压缩包,里面有个CrackMe1.exe,查看了下,没有壳。
直接拖到ida去反汇编
一进来就是在main里面,直接F5看看
可以看到在if ( sub_401060((const char *)&v4) )这里做了判断
跟进 sub_401060函数看看
这里得知输入的每个字符会跟20H做异或运算
在40708C的地址存在一处字符串,会提取该地址的字符串做-5的运算,然后跟输入的字符串异或运算后的结果对比
如此一来,我们只需要找到对应的40708C的字符串,手动提取出来,然后做-5运算,在异或20H
得到的结果,就是我们需要输入的验证码
数了一下,一共14位验证码
全部提取出来(提取时注意是从右至左)
#include <stdio.h> int main(){
int a[]={0x68,0x57,0x19,0x48,0x50,0x6e,0x58,0x78,0x54,0x6a,0x19,0x58,0x5e,0x6};
int i;
for(i=;i<;i++){
a[i]=a[i]-;
a[i]=a[i]^0x20;
printf("%c",a[i]);
} return ;
}
记得转ASCII码