DDCTf2019re12
本帖最后由 莫流云 于 2019-4-19 14:08 编辑首先我们用peid查看下发现加了壳,然后用工具脱壳即可然后载入ida分析F5查看main函数如下
发现先经过一个固定函数处理然后和DDCTF{reverseME}这串字符串比较双击进入上面的sub_401000函数
对密码表一一处理len(flag)=16,
用od打开,通过右键->中文搜索引擎->智能搜索 定位关键位置
双击输入正确后提示you got***向上查找在scanf处下断点
然后f9运行,再f8单步步过,然后输入,直到到flag处理而函数
F7单步步入,
然后写脚本就行了。查看0x402ff8处内存全为0
脚本如下
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<stdlib.h>
#include<string.h>
#include<string>
void drypto(int a[],char*b)
{ inti, j,k=0;
charc = {};
for(i = 0; i < 17; i++)
{ for(j = 0; j < 140; j++)
{ if(b == a)
{ c= char(j);
}
}
}
printf("%s", c);}
int _tmain(int argc,_TCHAR* argv[])
{ inta = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB7, 0x10,0x1F, 0xB6, 0x48, 0xEF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x7E, 0x7D, 0x7C, 0x7B, 0x7A,0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 0x6F, 0x6E, 0x6D,0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60,0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53,0x52, 0x51, 0x50, 0x4F, 0x4E, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x46,0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x3F, 0x3E, 0x3D, 0x3C, 0x3B, 0x3A, 0x39, 0x38,0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2F, 0x2E, 0x2D, 0x2C, 0x2B,0x2A, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x00, 0x01,0x00, 0x00, 0x00, 0x88, 0x2E, 0x3B, 0x00, 0x58, 0x3C, 0x3B };
charb = "DDCTF{reverseME}";
drypto(a,b);
return0;}
re2Re2是re1的加强版首先还是先peid查壳然后脱壳,接下来ida打开分析,首先还是查看main函数,然后f5
双击到sub_1181240函数里面查看,
双击到sub_1181000函数里面查看
然后od动态调
步入关键函数看到
下面代码为吧咱们的输入两位两位组合在一起
继续向下看,
下面一关键函数我转换成了伪代码形势
(输入为ABCDEF时)
for(i=0;i<strlen(s)i+=3)
input code:x1=s>>0x2 ab>>2==2A esp=0x18x2=s&0x3
ab&0x3=0x3x3=s<<0x4 0x3<<4=0x30x4=s>>0x4
CD>>0x4=0cx5=x4+x3 0x30+0xC=0x3C esp=0x19x6=s&0xF
CD&0xF=0xDx7=x6*2 0xD*2=1Ax8=x7*2 1A*2=0x34x9=s<<6
EF<<0x6=0x3x11=x9+x8 0x34+0x3=0x37 esp=0x1Ax12=s&0xF EF&0xF=0x2F esp+0x1B
需要用到的x1x5 x11 x12需要用到的再和作为下标从密码表中取值再和0x76异或得到字串和flag判断是否正确,在根据字串手动逆回去就得到正确flag了
625641201 发表于 2019-4-19 15:17
这道题我在OD的寄存器中的EAX可以查看到ascll答案的,还要写一个脚本花费了多一些时间
受教了看来我技术不到家 做了沙发虽然看不懂大神,还是感谢分享! 这道题我在OD的寄存器中的EAX可以查看到ascll答案的,还要写一个脚本花费了多一些时间 大佬用的啥工具脱的壳啊? 为什么你们的虚拟机都是server? 能脱掉壳么,我看od能做出来,但是脱不掉壳 看实例很有帮助! 谢谢分享希望论坛越办越好
页:
[1]
2