【2021春节】解题领红包之window逆向初级题--零基础小白解法
写在前面
本文仅适合零基础小白食用,阅读大约需要3~5分钟,所有文章思路及观点仅供零基础小白参考。大神如果不小心看了觉得辣眼睛,还请多多包涵!
多图预警!废话预警!预警!
推荐的环境及工具
论坛专用WinXP虚拟机2.0,PEID,EXEinfoPE,DetectItEasy,论坛专版OllyDbg。
本零基础小白认为,对于我们这种傻不拉几还不白不甜的菜鸟而言,环境搭建以及工具的选择和使用至关重要。就跟上山砍柴一样,选择哪座山和使用哪把刀将直接决定你能不能砍到柴以及能砍到多少柴。
因为我认为零基础小白在成长起来以前,是不具备大神那种徒手从容撑起天地的神力。(文章可能会多bb一些话,方便实操和借鉴思路,不感兴趣的看图片就完事了。)
此处以我个人的翻车经历警示一下各位零基础小伙伴:千万千万千万不要试图在win10环境下搞定这道题!具体原因请看论坛《新手脱壳破解常见问题几百问》。
始于动手(1分析查壳)
下载好题目之后解压出来,先打开PEID、EXEinfoPE、DetectItEasy,然后只管无脑将程序拖到这三个软件。
简单解释一下理由,一是查壳,如果有壳,方便知道关于壳的更多信息(方便百度或者找对应脱壳软件)。
二是看看能不能其他得到有用的信息,比如软件是用什么语言编写的(这样会方便我们搜索对应解决方案)。
查壳
从图片中,我们就知道有壳了,叫upx,EXEinfoPE显示的数字我推测可能是壳的版本之类的。如果你跟我一样零基础,可以借助搜索引擎了解一下。
然后还有最重要的一步,运行一下程序,你好歹要破人家(说错了,是要找flag)。
错误信息
发现弹出cmd控制台,要求输入密码,随便输入之后发现错误(英文显示,记住这个字符串)。
此时说不定你的想法会跟我一致,是不是破解了密码或者程序就能拿到flag呢?
源于尝试(2脱壳尝试)
先说结论,最后我是通过OD手动脱壳的,并且可能还脱了个寂寞,为了不误导各位小伙伴,脱壳的正确姿势请参考坛子里的各种脱壳贴,这里我的尝试和思路仅供解决这个题适用。
首先我的想法是找脱壳软件,论坛和搜索引擎里找了一圈,在win10环境下测试了一波,均以失败告终。
然后无奈只有上手脱壳,借助搜索找到了ESP定律,然而环境不对,死活脱不下这层外套(毕竟我是零基础小白~)。
直到我安装上了论坛虚拟机,我终于从脱外套上找到了快乐。
虚拟机里我仍然不死心,把虚拟机的upx脱壳软件试了一下,又失败。人生建议:能用工具方便解决的事,并且自己啥还不懂,为什么不选择站在巨人的肩膀上呢?
无奈只能ESP定律手动脱壳,你是不是在害怕ESP定律?不要紧,搜索引擎能帮你,坛子里的搜索和大佬也能帮你克服恐惧。
而我当时选择看着文字和图片教程操作,直到现在我也不知道esp是个啥,不过不要紧,跟着做就完事了。
一、打开OD
二、把程序无脑脱进去,出现'...分析不可靠...'字样弹窗点否。
三、先按一次f8,可以看到右边只有esp和eip变红,单击esp后面的红色字右键在数据中跟随。
esp定律
四、在下方hex第一行下断点后,然后按F9运行软件。
下断点
五、寻找OEP,脱壳。
反正我到现在也不知道啥是OEP,我的理解是脱下外套之后的真实身躯,为了不误导各位小伙伴,我只说操作(虽然我也看了一堆OEP特征码,还跑了几个OD脱upx脚本)。
反正运行之后只管单步(也可以用F4快捷键)到下图界面,右键-->选择用OD脱壳调试进程-->脱壳-->保存。
脱壳
真假李逵(3假装破解)
脱完壳之后,先看看能不能正常运行(不能正常运行还有修复之类的也别问我,我也是个小白好不好~)。能的话拖进1步骤里的三个软件,就能看到已经没有显示壳了。(此时我也有疑问,显示没壳但是拖入OD还是提示我分析不可信是为啥呢,DIE显示这是个C/C++程序?算了,我不该思考属于自己知识范畴以外的事情)。
一、查找可疑字符串
将脱完壳的程序再次拖入OD,点击右键-中文搜索引擎-智能搜索-上下滑动用眼睛查找可疑字符串(我是先找第一步里面的显示的密码错误字符串)。
可疑字符串
如果你的英文水平恰巧能跟我这个小学水平的不相上下,那么你一定能看到success,你懂的,成功诶。
但是现在我们先不去管它,因为你会发现有两个错误字符串。咋办呢?
二、分别击破
我的思路是两个分别点进去看,然后干掉。你要是疑惑为什么要点进去,还有其他软件要怎么干掉,多去看看坛子里大神的教程。
反正我的理解是要想成功,只有先干掉错误。怎么干掉呢,一般都是在关键的地方跳过或者做其他处理。
找到图中所示行,给它nop掉,因为我只看到那个向下的箭头指向错误字符串,我猜测可能是判断跳转。
干掉第一个错误1
为什么不用jump直接到成功?因为我不确定中间是否还有其他程序成功必须的逻辑。(我都是零基础小白了,你还要我咋样?啥,你还想问nop和jump是啥意思?网上冲浪吧,冲浪能让你变强大)
nop掉之后还要改一处把je改成jump,004022B5。
干掉第一个错误2
来干掉第二个错误字符串,也是找到图中所示行直接改成jmp跳转,不让它出现错误信息。(别问为什么?问就是网上冲浪~)
干掉第二个错误
改完保存为另一个文件之后,运行你会发现你输入任何字符串都显示success(成功)了。
然而成功之后并没有出现我们想要的falg,我意识到这个flag难道并不是在success之后出现,是不是我忽略了什么?
乘胜追击(4冷静分析)
此时我又回到上一步去看可疑字符串,发现一个可爱的52pojie,我产生了一个大胆的想法(手动滑稽~)。
将上一步保存的文件再次拖入OD,重新查看可疑字符串,点击52pojie进入下个内存访问断点,然后运行程序。
下断点52pojie
随便在运行的程序输入几个数字或者字母,就到了下图所示画面。
单步向下就完事了
看到右侧那个2021新年快乐开头的字符串了吗,不过别急,还得往下走,直到右侧出现2021HappyNewYear52PoJie
,就是我们要的flag答案了。
bye了个bye(5复盘分析)
这是本零基础小白的第一次破解,真的是从啥都不懂到获得答案,被win10环境都卡了好久(期间我还试图使用xdb32脱壳,脱下来了但是修复的时候遇到红色叉叉给我整懵了),能成功全靠运气。
可能很多地方是错误或者冗余步骤(受限于我249的低智商和狭隘的知识面,为什么智商还差1呢?因为等着各位看官老爷打赏1评分让我智商产生质的飞跃~疯狂暗示~),不过不要紧,瞎猫碰上死耗子就完事了。
跟想要学习或者其他零基础的小伙伴衷心的说一句,不要怂,干就完了。
最后总结一个字的经验:破解始于动手,成功源于尝试,实践是检验真理的唯一途径。