type
status
date
slug
summary
tags
category
icon
password

📝 本周周报

这周干的事情以及学习的进度

  • 重新搭建一个新的博客和评论系统
  • 这周学习了PE文件结构中的头文件(如IMAGE_DOS_HEADER,IMAGE_NT_HEADER,IMAGE_FILE_HEADER,IMAGE_SECTION_HEADER),导出表和导入表以及重定位表
  • 简单学习了一下clamAV(主要是从题目中学习)
  • 打了DASCTF-暑期挑战赛

新的博客

新的博客就是以notionnext为框架搭建的,以及就是Twikoo评论系统的搭建,解决不用GitHub登录也能评论的问题
以下是新搭建的博客
以及搭建评论系统的过程
首先说明一下为什么搭建一个新博客,这个博客是基于notionnext搭建的,它可以和notion同步起来,对我这种记笔记很多又需要上传的人还是很方便的

PE文件结构的学习

我觉得这一张图可以概括所有
notion image
在学习PE文件结构中最大的乐趣就是在家在WinHex里面看十六进制的数据然后找到所对应的属性
notion image
notion image
还写了很多关于PE解析的东西
notion image
但是目前自己只能在控制台运行它,等自己学了MFC写一个简单的PE解析器
具体的笔记在这里(导出表和导入表的笔记还没有)

clamAV的学习

题目是使用clamav自带的clamav-bytecode-compiler生成的一种.cbc字节码签名文件,下面是官方的介绍,其实通俗的来讲就是使用他的compiler将c函数编译成他的汇编再到字节码,字节码以一种ASCII的形式保存。 阅读官方文档可以知道,clamav支持将字节码反汇编,就是printbcir,它可以将字节码反汇编成类似于IR汇编的形式
notion image
当时在做这道题的时候选择了用解释器的方法,其实这种方法很耗时,用的就是SECCON CTF2022的一位师傅的文章
但是其实最好的办法应该是去读源码看功能
我们可以在官方的github里的bytecode.c找到所有关于处理cbc文件字节的函数
以下是cli_bytevalue_describe函数,我们发现它不会打印全局变量
notion image
我们找到parseGlobals函数,发现它处理的就是Global段,G就代表着globals
notion image
我们使用010查看文件,就可以看到全局变量段的内容,然后在分析函数发现他会先读段头,然后使用readnumber读maxglobal与numglobal,然后再根据numglobal的值去使用readConstant所以现在的两个重点就是readConstant以及readnumber
notion image
分析readnumber,将传入的buf的第一个字节作为长度,最长为0x10,然后将后面所有的长度之内的字节的后四位合并,返回。只处理大于0x60的字节。
notion image
了解这些功能之后我们去分析global的功能就行了

DASCTF-暑期挑战赛

DosSnake

16位dos小程序
notion image
放进IDA里面分析
这里为主要分析,其实就只进行了一个异或,DASCTF为密钥
notion image
exp
notion image

Strangeprograme

假的flag,根据经验是hook了memecmp
notion image
我们从start函数里面找
notion image
然后我们在这里转化成数组
notion image
我们逐步去分析这些函数
notion image
主要关注sub_411BB0函数中的sub_411555函数
notion image
这里就是hookcmp的地方
notion image
解密.DASCTF段
重新命名的函数
notion image
中间有个反调试给他干掉
下面是在遍历IAT获取memcmp的地址
就是一直tea加密密文的前八位,然后后面的对其进行异或
exp
notion image

BabyAndroid

jadx启动,通过字符串定位到关键方法
主要加密逻辑:首先loadData加载了assets/Sex.jpg,然后动态加载dex,先调用native方法sendInit加密,然后反射调用dex里的encrypt方法进行二次加密
notion image
我们可以找到加密的地方
先分析dex加载部分,使用rc4解密文件
notion image
由于自己还没学java,只能把代码给抄下来
notion image
我们对这个data进行解密,用厨子跑一下
notion image
我们发现是这样的数据,发现在native层里面还要这个sendinit
笔者先用JNItrace跑了一下,发现加密结果跟上图解出来的一模一样
notion image
就在这个encrypt里面
notion image
这段代码是一个加密函数,使用了DCT(离散余弦变换)进行处理
notion image
我们只需将我们上面解出来的数据进行逆离散余弦变换就行
exp
notion image

学习中遇到的问题以及迷惑

这周学PE的时候没有太多迷惑的地方,有一个问题是我现在要不要学一些java,现在安卓逆向的题大多时候都是依靠ai,但是有些大比赛可能就行不通了
以及我目前要不要专门去学一下那些壳(UPX壳,AsPack壳之类的)

🤗 总结归纳以及下周想做的事情

这周还是非常有收获的,感觉对PE结构了解更深了
下周想学一点win32API以及MFC,学习完MFC后想自己写个PE解释器再添加一些别的功能
下周正好也学一下反调试,正好下个月也要给学员讲反调试
下个学期想研究一下UPX的源码

📎 参考文章

 
💡
有关学习和复现上的问题,欢迎您在底部评论区留言,一起交流~
周报(四)PE格式学习
Loading...
5m10v3
5m10v3
目前主攻方向为Re
Announcement
🎉5m10v3のBlog已经上线啦🎉
-- 感谢各位师傅的支持 ---
👏欢迎师傅们前来交流👏