2023强网拟态fisher
0x00 前言很猛的异常处理和反调试
0x01 解无壳,64位IDA
上来就是创建快照,指定是反调试
查询发现检测的内容是xmmword_14003A578存的东西,解出来是vmtools
看来是检测虚拟机的,不过直接过掉就行
patch之后继续看,发现还有反调试
继续走,动调发现直接退出,看来还有反调试
走一下,发现在输出提示信息的后面有个函数sub_140001540,里面有个NtQueryInformationProcess
这边使用的NtQueryInformationProcess可以用于反调试,但官方提供的文档有所缺失,实际上反调试不仅可以传ProcessInformationClass = 0x7,还可以传其他的
patch掉
接受输入后面的那个函数15E0也有反调试
这边用了0x30,一样过掉,不演示了
之后继续运行,又退出
发现是这
直接patch掉
继续走,又退出,可能又有反调试,但是也可能已经进行了判断,因为走到这会发现下面就是输出判断结果,而这个判断之后就退出了
进入这个函数,发现输入(pbData)和长度(dwDataLen)被丢进了另一个函数里 ...
2024强网拟态easyre
0x00 前言纯动调,这玩意IDA看不了一点
因为用了iTruth版本的x64dbg,整合了不少插件(好多不知道啥用的)所以
听说有反调试?无駄!
0x01 解IDA看不了一点(好像是ollvm),上x64dbg一步步调
从输入下手,运行直到要求输入然后暂停,随便输点东西就会停下在syscall后面,回到用户空间后一步步ret回去,直到找到类似scanf参数的地方
之后一步步调,同时开启追踪记录,字节为单位,重点查看访问多次的内容,注意因为有大量花指令的存在,所以一定要用步进而不是步过来调,要不然随便哪个带call的花就会退出
首先可以发现这里调用了输入的内容
之后进了一个函数(其他花指令的call都是很近的,但是这个call跳转地址很远)
根据返回的值可以知道这是获取输入长度的(可能是strlen?)
继续跟踪发现这里被调用了三次之多,下个断点重启程序看看
重新执行直到调用strlen,然后看看输入长度被存到了哪里
发现存到了下面两个地址里面
下个两个硬断看看啥时候调用
发现丢到rdx里面去了
跟下去,发现rdx被拿去作比较了
估计这就是flag的长度了,试试发现确 ...
2024强网拟态A_game
0x00 前言游戏题,主要学学游戏题应该怎么做,以前碰到游戏题都在misc或者压根没做出来(然后没WP)
拿到这题是懵的,没有符号就算了,压根不知道该干什么
兜兜转转搜到了源码PacManX,本来想着有源码自行编译之后拿去BinDiff一下,但是自行编译很多环境是不一样的,所以不行
通过搜索字符串,查找一局游戏结束时的操作,发现也没有特别的,这时候就卡住了
后面查看WP发现原来是放在了读文件的操作上,看到游戏确实有给多四个文件,看来以后做游戏题还得注意文件读写这块(毕竟有存档之类的,这些东西也是可以藏数据的)
0x01 解无壳,64位,直接上IDA
想直接动调,但是有反调试
通过在import表搜索exit可以找到不少相关调用,一个个看,最后发现在高亮处这个地方很怪
F5一下可以看到对两个字符串进行了判断
这边这个反调试是这样的:
1.用函数CreateToolhelp32Snapshot,参数dwFlags=2,th32ProcessID=0,返回值给到变量hSnapshot
2.创建一个PROCESSENTRY32W结构的变量pe,其中dwSize=568
3.调用函数Proc ...
2024强网拟态babyre
0x00 前言试试爆破和klee两种方法
0x01 解分析无壳,64位,直接上IDA
还算简洁,就是注意输入中间每隔几位就要用-隔开,要不然读不到
先看看sub_401550
AES,没啥好说的,sub_401BCE是轮密钥加,sub_4016FD是字节代换,sub_4017C5是行移位,sub_40197E是列混合
可以在字节代换里面找到S盒,流程是标准的AES流程,没魔改,解密时可以直接解密
key是调用AES时的第二个参数unk_405420,共16Bytes
10x35, 0x77, 0x40, 0x2E, 0xCC, 0xA4, 0x4A, 0x3F, 0x9A, 0xB7, 0x21, 0x82, 0xF9, 0xB0, 0x1F, 0x35
之后才是重量级
AES的加密结果丢进了这个函数,a2就是丢进来的值,a1就是转换结果
分析了一下,a1总共16*12Bytes长,每12Bytes为一个单元,一个单元分为两个部分,第一个部分为a1[11]a1[8],分别存入1或0,应该是序号,最多为15(即F),而第二部分为a1[7]a1[0],存入的是a2的内容,一个一个位 ...
2024华为杯ezhtml
0x00 前言借机学学wasm逆向
0x01 解直接将.wasm文件拖入JEB(安卓逆向用的那个),选择wasmbc
直接去main函数,找到调用了函数f7
双击进去右键反编译
还算清晰,就是一个循环异或,最后一位明文由第一位密文加密,密文就在&aEBPGRM_VER9B_Q5S里面
附个脚本
1234567enc = 'EBPGRM|VE9B]Q5Sb4vJ^2|ZoU[t?SiDf9Cx'enc=list(enc)flag = ''for i in range(len(enc)-1,-1,-1): enc[i]=chr(ord(enc[i]) ^ (ord(enc[(i+1)%len(enc)]) & 0xf))print(''.join(enc))# DASCTF{WA4M_R3Ve7sE_1s_eZ_t0_lEa7N}
真不难,但是没做过所以一窍不通,借此也是学习了JEB在解析wasm的用处了,比搜到的又是编译又是头文件的简单很多
后面查到还有IDA解析wasm的项目, ...
2024华为杯downcity
0x00 前言纯VM,朝花夕拾
0x01 解无壳,直接进main函数
这么清晰?直接解了看看
我就知道.jpg
main下面有一大堆vm
可以发现是非常标准的VM
经过重设变量类型(a1应为_DWORD *)和一些分析,可以得出各变量的含义:
1234//a1 = memory//a1[0] = eip//a1[502] = stack bottom//a1[501] = stack pointer
然后在vm_init里面可以找到opcode
直接写解释器看看各条命令,这里的opcode是以4bytes为单位,其中第一个byte为操作码,后面的是立即数之类的东西
我直接一个拆分,一个字节一个字节读,所以我的eip的加加要加4,某些大的立即数也要从后往前读(小端),同时由于第一个值是eip,我也是自己搞一个来,所以有些地址操作要变,当然里面所有的立即数之类的,特别是放进去的地址后面写的时候也要做变换(后面会有注释)
1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
2024华为杯detou4
0x00 前言detours库的应用
有TLS反调试,不过不清楚怎么执行的
迷惑性很强
0x01 解无壳,直接拖IDA
比较清晰,首先是一个key,key长为16Bytes,然后才是flag的输入
先解key,进去发现是这样的
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253v13[0] = 0x728C;v13[1] = 0x5A38;v13[2] = 0x767A;v13[3] = 0x6AB9;v13[4] = 0x6BAD;v13[5] = 0x52D6;v13[6] = 0x6ECF;v13[7] = 0x68CF;v13[8] = 0x5469;v13[9] = 0x408B;v13[10] = 0x58E3;v13[11] = 0x4E1D;v13[12] = 0x791F;v13[13] = 0x5FC9;v13[14] = 0x78F2;v13[15] = 0x79CD;v7 = operator new(0x48u);v ...
安卓逆向学习之路——Frida
0x00 前言一直都知道Frida是一个非常强大的Hook框架,而且其Hook对象不仅限于安卓,连Windows应用的Hook他都可以搞定
然而受限于对JavaScript的不熟悉,一直拖着没有系统学习
借着《吾爱破解安卓逆向入门教程》提供的模板和介绍、对JS语言的相关语法的查阅以及利用其它框架的经验
还是系统地学学Frida比较好
参考:
《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上)
《安卓逆向这档事》十四、是时候学习一下Frida一把梭了(中)
《安卓逆向这档事》十五、是时候学习一下Frida一把梭了(下)
《安卓逆向这档事》十六、是时候学习一下Frida一把梭了(终)
0x01 Frida基础知识Frida是一款开源的动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,支持Windows、Mac、Linux、Android或者iOS,从安卓层面来讲,可以实现Java层和Native层Hook操作。
Frida的安装非常简单,不指定版本的话用pip就行(我的版本为16.4.3)
1pip install frida-tools
之后再把 ...
QilingLab-上手QilingFramework
0x00 前言第一次接触模拟执行这个东西,从QilingFramework开始上手试试看,后面还要学Qemu、Unicorn、Unidbg等
0x01 解使用
1git clone https://github.com/qilingframework/qiling.git --recursiv
克隆整个仓库
由于x86_64和aarch64题目内容,而我使用的是x86_64平台,因此为了体现模拟执行的强大,以下都使用aarch64的文件来解
之后使用模板如下
12345678910111213# 模板如下:from qiling import *from qiling.const import QL_VERBOSEdef challenge1(ql: Qiling): passif __name__ == '__main__': path = ['qilinglab/qilinglab-aarch64'] # lab目标 rootfs = "./examples/rootfs/arm64_linux" # ...
2024羊城杯chal
0x00 前言Cython逆向,借机学一下:Cython 二进制库逆向分析全面指南
WP来自2024年羊城杯粤港澳大湾区网络安全大赛WP-Reverse篇(全网唯一chal题解的含金量)
本体对环境有要求,一定要是linux+python3.12的环境
0x01 解根据给出的main.py,可以知道chal里面有个chal
1234import chalflag = input("flag: ")chal.chal(flag)
开启python,导入一下chal库然后打印一下属性
1234567891011121314151617181920212223Python 3.12.5 | packaged by Anaconda, Inc. | (main, Sep 12 2024, 18:27:27) [GCC 11.2.0] on linuxType "help", "copyright", "credits" or "license" for more information.> ...