攻防世界happyctf做法(xdbg分析)

攻防世界happyctf做法(xdbg分析)

码农世界 2024-05-18 前端 95 次浏览 0个评论

首先查个壳,

无壳,32bit,那就丢进先ida32中进行反编译,然后进入main函数分析一看代码太多了,而且函数也很多,那就只能直接凭感觉找了,先看到那一个字符串v6,肯定关键,然后我们再看到if条件,外面有个大的if条件,v12位数是否为24,else为not  enough 不够的意思,猜测flag位数为24位,然后也挺难看出什么其他的来了,那就丢进xdbg32中看看接下来我们要考虑在哪打上断点,这时候先返回ida中,找到if ( sub_405DE0(v12) == 24 )这一句话,然后在这句话末尾的空白处点一下,按tap键,进入汇编界面,最左侧有汇编地址,ctrl+c复制一下,然后返回xdbg中,ctrl+g输入地址,进入,在最左侧打上断点如图操作,红色代表已经打上了断点,好,那么好,接下来,我们直接运行(下图中方向朝右的箭头代表运行),然后会弹出黑框,这时,我们输入24个a,然后回车这个时候,按f8,单步走,然后我们会发现这是一个循环,对应ida中的那个小while循环,如下图

接下来,我们对这里面分析一手,顺便教几个简单的汇编知识点,如下图其中指令cmp代表比较的意思,jmp代表跳转的意思,call代表引用函数的意思,lea的意思是将右边值的复制给左边,可以近似看作是mov的用法吧,push就是出栈,add  eax,1等同于eax=eax+1,je代表相等跳转,差不多就这些吧,那了解了这些,这边就不难看懂了,这里面大概就一些比较,赋值等等,这里面有一个关键点,push eax后(压栈),获得了单个数据,然后call(引用)一个函数,发现每次循环都是这样,那我们进入这个函数看看,同样也是在ida中复制地址,在xdbg中跳转,找里面对eax的处理和一些关键点,xor  eax,14  一个异或处理,下一句也很关键,是将eax的低位复制到一个地方,相当于是存储异或之后的数据,再往下看,也有一个函数引用,点进去看看没啥东西,跳过就行,那么这边的主逻辑就是一个异或处理,当这边的循环结束后,我们再往后运行,00406974对应ida中的if条件,此函数的返回值不能为1,我们在xdbg中进入这个函数看,让其返回值为0,关键点在这,cmp eax,ecx 一个是我们输入进去数异或后的结果,另一个是已知数组,这边将两者作比较,相等跳转到D7,不相等就继续向下运行,跳转到E6,再返回上一界面  test异或两个ecx,不相等为1,相等为0,然后判断是否跳转,我们理一下整个的逻辑,我们输入进去的数,进入一个函数异或处理一下,然后进入另一函数,与一数组进行比较,然后在判断是否跳转,整体逻辑大概就这样,那么接下来写个代码

#include
using namespace std;
int main()
{
	char str[]="rxusoCqxw{yqK`{KZqag{r`i";
	for(int i=0;str[i]!=0;i++){
		str[i]^=0x14;
		cout< 

第一次用xdbg做题,给我的感觉有点难,可能是汇编底子太薄了,所以很多地方不是特别能理解,结合ida的代码才好理解,也是在网上看了别人的wp才慢慢理解的,如有写的不好地方,欢迎评论指出,我也希望能从大佬们身上得到建议与指点^_^

转载请注明来自码农世界,本文标题:《攻防世界happyctf做法(xdbg分析)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,95人围观)参与讨论

还没有评论,来说两句吧...

Top