攻防世界逆向入门题之csaw2013reversing2

99 篇文章 33 订阅

攻防世界逆向入门题之csaw2013reversing2

继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向入门题的csaw2013reversing2

在这里插入图片描述首先把下载的附件扔如exeinfope中查看信息:
在这里插入图片描述win32无壳,那么既然是windows的直接双击运行一下看看:
在这里插入图片描述弹了个框,结合题目所说的:

听说运行就能拿到Flag,不过菜鸡运行的结果不知道为什么是乱码

那么这个就是乱码的flag了,乱码有好多种,base64加密等等这些,我们一个个排除,先扔入IDA中查看伪代码。要先看C或C++伪代码再分析反汇编结构图最后才看反汇编文本!!!!
我吃了很多亏在这里,总是以为能直接看懂汇编,的确能看懂,但是无法掌握汇编的结构流程,所以照着上面步骤来就会好很多。

main主函数伪代码如图:
在这里插入图片描述首先扔开系统函数,系统函数大部分都不是解题关键,

MessageBoxA(0, lpMem + 1, "Flag", 2u);
  HeapFree(hHeap, 0, lpMem);
  HeapDestroy(hHeap);
  ExitProcess(0);

这些都是系统函数,那么解题关键就在前面了:

  memcpy_s(lpMem, MaxCount, &unk_409B10, MaxCount);//这个是复制函数,把&unk_409B10处的字符串赋值给lpMem,分析后可知这是乱码的flag,双击跟踪&unk_409B10也可以看到是弹框中输出的乱码。
  if ( sub_40102A() || IsDebuggerPresent() ) //这是判断函数,如果判断是调试器运行就执行这个解密
  {
    __debugbreak();
    sub_401000(v3 + 4, lpMem);//这个双击跟踪进去后发现是一个运算函数,那么只能是解密算法所在了
    ExitProcess(0xFFFFFFFF);  //解密后就退出了,就没有后面的弹框了,需要我们自己想办法。
  }

分析完了,我们开始解题,也是好几种方法:
1:静态调试:根据sub_401000的解密算法自己仿照C语言或python脚本解密,因为参数都可以跟踪到。

2:动态调试:在onllydbg中进入解密流程内,解密后查看寄存器或跳转到messageboxA中进行弹出即可。

这里我用的动态调试:
按照流程看完C语言伪代码后我们来看反汇编结构图:
在这里插入图片描述有了前面分析基础就看懂得多了:loc_4010B9:是弹框函数所在,loc_401096:是解密函数所在,最左边那个应该是冗余代码,loc_4010EF和loc_4010CD: 都是退出函数所在。
注意这里loc_401096有个int 3;这是断点的一种,代码执行到此次会抛出异常然后强制退出,所以我们在动态调试中要改为nop。

接下来看反汇编文本:
在这里插入图片描述可以发现大同小异,照着反汇编结构图来跳转划分即可。

那么我们上onllydbg:
在这里插入图片描述可以看到我改了几个地方:
1:
002B1094的 jz short loc_4010B9改成jnz short loc_4010B9,虽然我也不知道为什么我用onllydbg调试还是进不去解密函数,可能onllydbg被认为不是调试器吧。

2:
002B109A 的int 3;断点强制退出被我改成了002B109A nop,标识空操作,避免退出。

3:
002B10A3的 jmp 0453d212.002B10EF改成jmp 0453d212.002B10B9 因为这里别来解完密后就退出的,我把它转到原来loc_4010B9:的messageboxA函数去作为弹框内容输出了。(ps:我本来是跳转到最IDA反汇编结构图的左边那个冗余函数的,因为我看它也是MessageboxA函数,结果弹出个空框,对比后才发现它比第二个MessageboxA少了几行代码,原来是个坑,难怪。)

到这里就弹出flag了:
在这里插入图片描述

总结:

1:
要先看C或C++伪代码再分析反汇编结构图最后才看反汇编文本!!!!
我吃了很多亏在这里,总是以为能直接看懂汇编,的确能看懂,但是无法掌握汇编的结构!

2:
首先扔开系统函数,系统函数大部分都不是解题关键,

解毕!敬礼!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐一 · 林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值