-
-
[原创]52pojie第一题前半段,小菜写着玩,求轻喷
-
发表于:
2016-3-29 09:44
4708
-
[原创]52pojie第一题前半段,小菜写着玩,求轻喷
昨晚看到已经有大神发
算法的分析了(算法好难,F5之后依旧棘手,动手模仿到一半放弃了,嗯,还欠仙果大牛一篇帖子),小菜只是写点先前的debug分析,只为博诸君一笑。(顺路求个职?)
周一才看到比赛,于是想弄一弄试试看,时间匆匆,昨晚麦洛克菲同学群里,有朋友说看到有分析贴了,一时手痒,就来发帖了。
流程基本是这样的:
1、bp user32!MessageBox*,先找到被调用的是MessageBoxA,栈回溯,找到xxx地址,扔到ida里面,发现向前面的代码篇下断点竟然无效。
2、由于可以无限次点“Register”按钮,对堆栈的固定位置下ba w1 xxxx "u eip L1; dd xxxx L1; gc"断点。至于是哪个参数,想想代码优化应该知道,成功与失败一个参数之间。
3、找到位置后,向上翻一下基本就能找到cmp xl, 1;中间吧啦吧啦一段,接了一个jnz的地方,后面的跳转对应这个不同参数的选择。
4、再向上能看到好几个push exx; 吧啦吧啦; pop exx;或者pushad; 吧啦吧啦; popad;的地方,这里exx根本就不会改变嘛,再向上就能看到一个call,这个call前后没有该死的push和pop操作,那必然就是这里了。
5、到了这里发现实际已经偷偷申请了一个新空间在里面放了个dll性质的东东(还有全局变量存储api),跟进去之后,跳过几个看似很棘手的函数,就能到大牛HighHand昨天放的算法分析的地方。
Warning:
1、很多加花的地方,混淆了好几个关键的api call,这里最好信ida,别信od和windbg;
2、堆里面的代码其实找到几个全局变量,就会发现其实实现的功能比ida看上去的简单多了;
3、堆里面的代码怎么扔到ida里面分析?请自行在论坛内搜索od的用法。
BTW:
1、想注册好久的52pojie一直有各种事情错过注册时间,感觉好愧疚,于是在比赛结束之前,就不放具体的地址和贴图了,就是个调试的大概路径;
2、关于MessageBoxA,写这里的时候,想了想他喵的,可以直接用ida找字符串的,当时**了,大家见笑了;
3、再次膜拜算法大牛牛。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)