0x01
libdroid 攻防世界
工具
dex2jar+jd-gui
思路展开
下载下来附件,改为.zip后缀,解压出来得apk文件,apk文件再改.zip后缀,再解压,得到dex文件,dex2jar反编译,jd-gui打开。
接下来的操作对安卓开发的细节要充分了解,先搁在这,日后跟进。
32C3_this_is_build_for_flag_ship_phones
0x02
MyDriver2-397(windows驱动)
工具
IDA
思路展开
sys后缀,驱动,好吧,我是一脸懵逼。驱动已经提上日程了,还有上面的java的安卓开发(太菜了)。
先去看卸载函数
开关内存保护,然后把正确的地址写回去,从这出发,顺着线往上找,发现程序是用inline hook(如何看出inline hook)下图ff25,jmp e9/ff25
跳转的硬编码
进入sub_114D0
统计文件中字符次数,若大于8次,先执行sub_115dc,再执行sub_112b4写入byte_16390。进入sub_112B4
看byte_16390怎么来的,找到解密函数:
逆向算法解密,v1、v2通过sub_11DF0函数算出,两个参数1546720197和42。
the flag is A_simple_Inline_hook_Drv
逻辑:inline hook ntcreatefile 然后 统计 P_giveMe_flag_233.txt 打开的次数,如果是第九次 那么 就会把flag 写入到txt 里面,由于inlinehook所以不会往里写flag。
另一个思路:
此题从正向出发,先找DriverEntry,看逻辑,也可找到sub_113C8(),分析算法可得(有好几个函数,sub_113C8函数最像计算flag的函数,自己太菜,现在靠猜了,唉)
0x03
easy_go
工具
ida逆向去符号表脚本+gdb
思路展开
ida没符号表(符号表:平常打开ida都有函数名称指示,那个是main函数,那个是打印函数,本题打开发现没有这些指示,所有函数都是sub开头的通用表示,所以用脚本还原这些函数名)
IDA 7.0 如何使用 IDAGolangHelper插件
配置好后,执行脚本还原函数名称,找到main函数。
有个红色区域,猜测软件保护技术,所以采用动调,ida动调失败(有ida反调试,但ida改不了跳转,无奈放弃),所以采用gdb调试,在0x495318下断点调试,提示输入时,随便输入,flag就出来了。
flag{92094daf-33c9-431e-a85a-8bfbd5df98ad}