首页
社区
课程
招聘
5
SUCTF2019 Akira Homework分析文档
发表于: 2021-3-5 15:57 9616

SUCTF2019 Akira Homework分析文档

2021-3-5 15:57
9616

目录

程序流程

该程序没有壳,有三处简单的反调试,patch掉后,通过输入的检测后,会有三段解密函数来还原出一个dll,通过文件映射向dll内传递flag的密文,在dll中进行aes解密,最终得到flag。

 

1614925201124

逆向分析

查看基础信息

运行一下,查看其输出结果。

 

1614862244096

 

首先使用Exeinfo查壳,发现没有壳,是X64的程序。

 

1614861975162

 

用X64dbg打开发现有地址随机化,用CFF关闭地址随机化OptionHandle->DllCharacteristics,便于后续继续分析。

 

1614862750802

反调试

TLS反调试

在main函数处下断点,运行后发现有弹框并退出进程,则判断有TLS反调试。

 

1614863314408

 

使用ida查看TLS函数处,发现有IsDebuggerPresent反调试和四个加密的数组。

 

1614864293475

 

手动Path掉反调试,继续分析,等待数组的内容解密后可以看到解密后的字符串。

 

1614735598871

  • NtQueryInformationProcess 取进程信息函数,可以用于反调试(有调试端口,可以检测进程是否被调试)。
  • ZwQueryInformationThread 获取线程信息,可以用于反调试。
  • NtQueryApcThread apc队列

APC注入可以让一个线程在它正常的执行路径运行之前执行一些其他的代码,每一个线程都有一个附加的APC队列,他们在线程处于可警告的时候才被处理(WaitForSingObjectEx,SleepEx)。

异步过程调用,apc可以看成就是内核里的定时器,为了给自己一个在本函数返回后还能执行的一次机会,有很多操作是需要在函数返回后才能执行.类似于析构函数但不完全是。

 

反反调试:跟进IsDebuggerPresentAPI中,进行如下修改即可。

 

1614910362383

线程反调试1

位置:mian函数->beginthreadex中的线程启动函数(140009180)-> sub_140008B20。

 

使用快照遍历进程获取进程的md5值与原有的md5值进行判断,当存在指定进程时则退出程序,这里可以判断为反调试。

 

img

 

反反调试方案:patch掉exit函数即可。

md5加密算法的识别

md5加密的两个特征:

  1. 加密后的字符是32位。
  2. 在md5函数中有查表相关的操作。

1614820886234

 

md5对比值

 

1614820914195

 

据此可以判断其为md5算法。

线程反调试2

这里为线程启动函数中的第二个函数,里面全部都是进行反调试的代码,除了调用常见的IsDebuggerPresentCheckRemoteDebuggerPresent来进行反调试,还调用了TLS解密后的函数NtQueryInformationProcessZwQueryInformationThread来进行DebugPort调试端口的判断。

 

1614909973818

 

反反调试:直接patch掉这个函数即可。

解密函数分析

顺利进入到main函数,开始下一步的分析,进入sub_140009C20函数中。

 

可以看到为全局变量qword_140016178qword_140016180 申请堆空间的操作。

 

跟进其中的sub_1400086C0函数内,发现了疑似函数参数内有编号0x10001~0x10003。

 

1614866705853

 

依次跟进这些函数中。

 

1614866417586

 

这里跟进函数中的虚表的第二项可以看到对应的虚函数的地址。

 

1614849163738

 

跳到对应的函数地址sub_14000a8a0去查看,发现有对原有数据进行异或的操作。

 

1614866496727

 

跟进去byte_1400111A0可以看到,其为一大段数据,长度为19456,这里可能藏有一个文件。

 

1614866637379

 

继续分析剩下的两个sub_140008370sub_1400083F0发现其结构与sub_14000a8a0中一致,找到虚表中的虚函数地址依次跟进去。

 

1614867024753

 

1614867077718

 

发现其都对byte_1400111A0数组内的数据进行了变换的操作,同时由于if判断条件的不同,各对其中的一部分数据做变换,猜测其可能为解密的函数,并与之前传入的ID可能有所关联。

 

退出去sub_1400086C0函数,回到sub_140009C20中,接着往下分析。

 

可以看到创建事件对象的操作,结合上述解密函数里有SetEvent设置事件对象的操作,猜测这里是为了防止重复对数据进行变换。

 

1614867903314

 

接着往下跟进sub_140008850,可以看到这里获取函数地址的操作,而这几个函数的名称是在上面分析过的TLS函数中解密的。

 

1614868067713

 

此时第一个函数sub_140009c20分析完毕,再次回到main函数中。

 

可以看到其有创建线程的操作,跟进其线程启动函数StatAddress中去。

 

1614868203054

 

跟进去后,依次对其中的函数来进行分析。

 

1614868251419

 

首先进入第一个函数sub_140008B20中去,进行分析。


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2021-3-9 17:14 被flag0编辑 ,原因: 有遗漏
上传的附件:
收藏
免费 5
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2022-7-27 21:47
飘零丶
为你点赞~
2022-7-17 02:31
0x指纹
为你点赞~
2021-3-6 12:14
Lixinist
为你点赞~
2021-3-5 17:20
kanxue
为你点赞~
2021-3-5 16:10
最新回复 (3)
雪    币: 56043
活跃值: (21225)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2021-3-5 16:10
0
雪    币: 1378
活跃值: (3067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
52pojie上绿色版ida7.5带了FindCrypto
2021-3-5 17:46
0
雪    币: 5048
活跃值: (19305)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
4

好早的比赛了,记得当时有写了份wp,找了下还真找到了,里面有我自己的wp和出题人的wp,分享一下给需要的同学,顺便怀念一下以前没日没夜打比赛的日子...

最后于 2021-3-6 12:16 被0x指纹编辑 ,原因:
上传的附件:
2021-3-6 12:11
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册