【攻防世界逆向】【高手题】《crackme》《debug》《ReverseMe-120》

Crackme

Posted by Corax on September 30, 2023

#题目crackme ##解法 第一次做这样的题,可以说是奇难了。 1.手动脱壳,这道题是nspack,没见过这个壳,去找别的师傅学习了一下,https://blog.csdn.net/xiao__1bai/article/details/120230397讲的非常详细了,但我还是想用我的语言把我的理解再复述一遍。nspack,北斗壳,也是一种压缩壳加密壳。用的是堆栈平衡原理,这个原理就是要在加壳的时候保证壳初始化的现场环境,就会有pushad,pushfd这样的指令。可以把壳当做一个子程序,当壳把代码解压前后,要遵循这个堆栈平衡的原理。 下面开始详细步骤,打开odg。 ok很标准 对esp右键数据窗口追踪 按f7两步步入这时候两个push已经压栈完毕,可以看到esp现在所指向的地方 对这个地方下硬件断点 执行过来是这样的界面,可以看到下面一行就要call了。我们步入。 来到了这里就是我们的oep。用dump工具进行脱壳 再用ida打开看看 已经是脱完壳的状态了。 算法也很简单,但不知道为什么,这里的print和scanf没给我识别出来,但也无伤大雅吧。直接写出脚本 #题目debug ##解法 这道题也是从来没做过ida反汇编出来是这个东西 一时间也盲头了。直接去看别人的wp。 2.是要用.net反编译去做,有两款软件ILSPY和dnSPY,我用的是dnSPY。在dnspy中几个关键操作是:F9为添加新的断点;F5为调试程序集;F10为逐过程运行程序语句;F11为逐语句调试;shift+F11为跳出。 打开之后找到关键函数的地方。然后分析一下。 这里主函数已经读入我们的内容之后与他内置的flag进行一个对比,所以我们直接就在比较的地方下断,看一下存的到底是什么flag 直接看到flag #题目ReverseMe-120 ##解法 这题没有前面两题这么抽象,ida分析就可以看到过程 判断正误的就在于红框内的代码。那我们就要看v12在哪里动了手脚了。 很奇怪,居然没有传入。确实是很蹊跷点击进入这个才恍然大悟。 3.这里就有一个知识点,在外面的时候可以看到只是对v11进行了操作,但是点进去之后才发现这是对寄存器进行传参了,只是ida识别不出来而已。 ok,那么这个函数就是比较关键的处理函数。 这里我没看懂,看了别人的writeup,才明白这里是一个base64加解密的过程,关键可以看看这里 所以逆向思路也清晰了,you_know_how_to_remove_junk_code,异或操作,base64加解密 贴出脚本 总结: crakeme 脱壳题 栈堆平衡 debug 初识.net ReverseMe-120函数传参 base64