FoodieOnTheWay 发表于 2016-6-23 22:59

一道面试的CTF的CrackMe题

首先先道歉,因为最近Boss让我开始搞apk,所以之前做的《修改ProcessMonitor过TMD壳反监测》就没继续做下去了,中间也有一些收获,本来想分享一下,但是总觉得没啥干货,所以这个注定不会有续集了。作为补偿,把最近的一个面试题给大家分享一个,祝所有应届生和打算找工作的兄弟们都一些顺利,心想事成。

顺带,跟大家推荐那个工具,android killer,真的很好用,就算不是用来分析病毒木马锁屏软件,平时自己没事儿了,看看代码,修改一些功能,自己给自己打包个专用版apk,感觉也挺爽的。而且,这个难度比.Net程序还低哟。

另外,我也希望用我的事情鼓励一下之前可能比较少动手做实践的朋友们:
       之前几个哥们去专门搞移动端样本分析了,而我当时总觉得自己到了移动端,万事都要从头来,就没敢去。
      如今Boss说我们干PC不挣钱,都靠着移动端养活呢,不由分说就让我同时搞安卓。
      这几周边学边干下来,感觉其实没有想象中的那么难,有时候还觉得比搞PE容易不少,等发现有意思的样本的时候再跟大家分享。
      尤其是那些希望从事安全的学生党们,Just Do IT。有些东西,做了就会发现,其实不难。
---------------------------------------------------------------------------




缘分
       应该说,最近跟CFT缘分还是挺大的。上次刚做过一个CTF题(某CTF比赛题解析分享--RSA Roll),然后,这次面试又遇到一个CTF题,还是挺巧的。


破解
1.首先观察样本
       你会先发现样本的按钮是会移动的,当你光标移动过去,鼠标就会偏移。
       具体效果截图也看不出来,大家动手试试吧!


2. 摘掉“会飞的按钮的翅膀”
       用OD加载样本,发现这个样本还有Anti-Debug功能,主要是通过CheckRemoteDebuggerPresent这个API实现的。
       解决方法:那就重新加载一次,然后改一下ZF或者返回值,就可以Bypass。



       接下来,就可以正常调试了。推测这个让按钮“飞走”的API是MoveWindow。这时候在IDA上打开,找到调用的地方,然后对照着OD,把所有MoveWindow这段全部NOP掉。



       不过,我也看到了这个,这时什么鬼,能吃么,能提供线索么?我不知道



       好了,不管它了,继续走,终于,我们可以点击到那个该死的按钮了。
       至于key,我不知道,爆破一下吧,如下图。



      好了,满足了精神上的征服感,我们开动IDA来找找它的key吧。


解题
1.用IDA祭出F5大法看看最后边的检查吧




0x418217(ImageBase按照0x400000算)的值因为有线程里的代码不断改变,可能为0x03, 0x0C, 0x30, 0xC0,但根据最终的检查结果
(edx),它只能为(2),因此,则可以推算出跟Jc14(4A63 3134)组合的结果可以是:
0x0248(H)61(a)33(3)36(6)


据此来看,那么key的18-21位就是“Ha36“。


2. 按照检查的顺序,再看看开头的检查

前5个字符为"HCTF{",最后一个字符为(})。因为可以看出来,这个函数在运行时仅检查返回值是否为 TRUE ,调试时我直接把返回值进行了更改



3. 中间部分的分析




可以看到,数据弄来弄去的,好乱的样子,我做了个表。根据上述运算,推测出来中间的几个字符为“UareS6cLeVer”
Addr4191C04190C44190C84190CC4190D04190D44190D84190DC4190E04190E44190E84190EC
After Exch 6664C8687575140B68156812
Before14
756812C866
68

75
Oct20100117104182001021110421104117
CharUareS0cLeVer



4. 拼接字符串
Key = “HCTF{UareS0cLeVerHa36}”。可能作者给破解人增加难度,增加了两个线程不断修改两个数值,导致最后无法顺利弹出“OK”窗口,不过我相信作者的本地就是逆向出整个思路,这里应该不是考察的地方。
key的意思是,You are so clever,最后几个我不太懂,跟甜党有关么,我这么吃货怎么居然不知道?看官们也试试吧,或许你们能明白出题者的用意,聪明的小孩们!
最后,作为资深吃货,我也要振臂高呼:甜党万岁!!!豆腐脑和粽子就应该是甜的,吃咸的的人都应该被火烧死,哼哼{:1_918:}


xxxioneAald 发表于 2016-6-25 07:02

很幽默啊

FoodieOnTheWay 发表于 2016-6-25 22:32

still1414 发表于 2016-6-25 20:19
现场看病毒。。PC端的难度怎么样啊?我也分析过精华帖里的一些样本,不知道面试的样本和那些比起来有差多 ...

上一次面试某个APT相关的职位,让我分析了一个JS样本,加密过的,不过可以用动态调试,还原后来看,其实就是一个TrojanDownloader,应该说还是很简单的。也有次是分析一个.Net样本,环境中没有ILSpy,就只好用IDA看了,结果自然不太好,不过后来跟面试官相谈甚欢,就算是过了技术面。

still1414 发表于 2016-6-25 20:19

FoodieOnTheWay 发表于 2016-6-25 19:09
会让现场看病毒样本,见过PC的,安卓的,JS的。但是这个需要还原算法的,需要很长时间,一般都是带回来做 ...

现场看病毒。。PC端的难度怎么样啊?我也分析过精华帖里的一些样本,不知道面试的样本和那些比起来有差多远,最近也想着去面试病毒分析师,可以问下大概都问什么问题么?

11212122 发表于 2016-6-23 23:12

豆腐脑,粽子我只吃甜的,其他人我不管

小宅博士 发表于 2016-6-23 23:13

LZ,请教该怎么开始CTF,该学习什么,本人就了解过C语言,暑假准备学python

still1414 发表于 2016-6-23 23:19

面试的时候会让你直接现场破解么?

jackfang 发表于 2016-6-24 00:46

谢谢分享

FoodieOnTheWay 发表于 2016-6-25 19:07

小宅博士 发表于 2016-6-23 23:13
LZ,请教该怎么开始CTF,该学习什么,本人就了解过C语言,暑假准备学python

我也是因为最近几个实习生参加CTF,才接触到的,同样不太熟。我最近收藏了《CTF Binary小技巧》by Eins0n,还有@Lightless 分享的CTF例子。

FoodieOnTheWay 发表于 2016-6-25 19:09

still1414 发表于 2016-6-23 23:19
面试的时候会让你直接现场破解么?

会让现场看病毒样本,见过PC的,安卓的,JS的。但是这个需要还原算法的,需要很长时间,一般都是带回来做,这个让我熬了一夜{:1_906:}。

hxsoft 发表于 2016-6-25 20:22

这个涨姿势了,谢谢楼主。
页: [1] 2
查看完整版本: 一道面试的CTF的CrackMe题