- 博客(56)
- 收藏
- 关注
原创 BaseCTF2024 WP (主要为Rev)
经典迷宫,出题人不知道怎么想的让程序故意打不开,也没看见动调。搓一个DFS(AI写的),上下左右wasd。nc一下即可,注意nc之后要ls。脱UPX标准壳,解base64。简单的反向异或,数据动调取一下。AI秒了,实际上就是个AES。GPT秒了,爆一下hash。换表base64+异或。
2024-08-21 17:07:59 688
原创 CISCN2024 RE 后两道 wp 复现
其实逻辑还是挺简单的,当时没认真做伪代码还算清晰几个循环的加密之后判断密文难点是前面有随机数参与加密,不过可以猜测随机数是不变的。第一段加密flag异或一组随机数,这里可以在异或的位置下条件断点,用idapython把随机数直接打印出来(会发现是不变的)得到第一段异或的随机数第二段ptr数组直接点开看不见,鼠标悬停在上面可以看见一个地址,跳转过去0x55610C1B5AC0跳过去取38个第三段加密换表+异或直接从crypto倒推,异或的tmp随机数用相同的方法打印。
2024-07-11 11:02:18 814 1
原创 春秋杯夏季赛2024 RE wp
HIDWORD取最高位的dword,就是最左边(图一中是0xD),key就是最低位(图一中0x3),DWORD1比最低位高一个dword(图一中0x5),DWORD2比最低位高两个dword(图一中0x8)然后就是取参数,要动调,绕过前面的反调试之后会有奇怪的异常,原程序的SMC不知有什么问题。数据都存到xmmword里面去了,可以查看一下xmmword_408060,发现里面的数据是动调出来密文的倒序。40行的反调试改一下ZF值为1即可,本来是往左边跳转(检测到调试),修改后往右边,异或0x33。
2024-07-10 22:38:20 638
原创 frida hook微信防撤回(PC端)
发现多个分支都调用了sub_1826DA2D0函数,且之前的字符串也在其参数当中,这时候再去hook该函数0x1826DA2D0也是有回显的。但是这里输出的地址是个装载之后的虚拟地址,要与ida中函数的地址对应,还需要进行一个转化。转成伪代码会发现这里是一个switch语句,当v9==4时就会触发撤回的函数。我们把edi(64位对应的rdi)的值强行修改成不是4的值(这里改成0)我们需要找一下实现撤回功能的函数,尝试在字符串里搜索revokeMsg。对应的函数时,有了回显。撤回的消息就被固定了!
2024-06-10 18:45:32 914
原创 矩阵杯2024 Re wp 前两题
像1指令是mov一个数进入寄存器内,第一个opcode是1,第二个是寄存器的编号1,第3-6个是小端序存储的数据。从数组的套娃格式和256这样的特征值可以猜测RC4,不过211指令似乎应该是异或,不知道为什么打出来是与。并不是所有的值都在0-17之间,这是因为该指令集是几个opcode一组,因为有参数。当时想的就是这个方法,不过有python版本问题,应该用3.8的,不然会报错。quickjs本身是有输出字节码的功能的,需要我们对。主要是换盒子的时候改了一些算法,s2是逆序异或的。
2024-06-10 18:41:49 1095
原创 CISCN2024 初赛 wp 部分复现(Re)
成功率比较玄学,有的版本就不行,我用nexus5x真机也是会崩溃,这里是雷电9.0模拟的OPPO 9。字符串收集信息,可以猜测是利用seed生成randint、random之类的随机数进行了处理。密文长度是56,base64是3->4,转回来flag是42个字符(猜测)借助GPT对几个关键函数进行分析,忽略一些异常处理,看一下主要的逻辑。输入的内容base64编码之后,与通过randint生成的随机数异或。首先是unidbg的环境配置,这个特别麻烦,建议使用。讲的蛮好的,就是挺麻烦,基本功要求高。
2024-06-10 18:26:28 1129 3
原创 CISCN2023 初赛部分复现
不知道怎么看出来的,这里使用了DWARF Expression将代码隐藏在栈展开过程中,在异常处理中恢复隐藏代码。然后有两种分析方法,一种就是根据DWARF的语法手撕字节码,另一种就是借助rust编写的解释器(来自。输入错误的flag就会返回相同的内容,然后卡在一个循环里等待输入,再次输错就退出了。可以直接看见伪代码方程,可以z3爆,或者跟上面一样算,脚本都差不多。不知道是不是我的问题,这个爆破非常慢(比hook慢多了),不太推荐。参考的这一篇wp的方法,hook脚本很复杂,我也不太懂。
2024-06-10 18:20:56 1152
原创 XYCTF2024 RE ez unity 复现
dll依然有加壳但是这次global-metadata.dat也加密了,原工具没办法用了,不过依然是可以修复的。
2024-05-03 17:01:06 1209
原创 帕鲁杯2024 RE wp
随便输一串输入,长度尽量长一些方便把密文patch到input里面(密文也可以动调在crypto里取),断在scanf后面。是42行转化为16进制之后的结果,不过不方便转化为可见字符,所以我们patch到input里面去。也不知道怎么找,纯Misc题 0n3_n00b_ru1n5_0n3_hundr3d_pr05。chacha20和RC4一样是流密码,可以通过动态调试解密,只要把密文输进去再跑一遍就可以。相当于制作了一个字典,将规定的字符映射到一个值(索引值)上。似乎是密文和key,input是个假的。
2024-05-01 18:31:53 894
原创 XYCTF2024 部分wp
工具使用参考,但是PC的unity逆向没有so文件,用的是GameAssembly.dll。这是一个三棱换,公式是R U' R U R U R U' R' U' R2。一个比较高级的爆破,因为存在多解和不满足条件的树,所以需要深度递归爆破。在线解魔方乱七八糟,可能有多解,多数不止涉及到RU,只能靠魔方经验做。ubuntu上运行不成功,改kali装qemu就可以了。我以为是文件时间戳,结果是从0开始爆……扔给厨子是个好习惯,当然代码逻辑也能看。U是上层顺时针90度,就不多分析了。u,r实际上是指U',R'
2024-04-28 20:39:43 908
原创 第九届中国海洋大学信息安全竞赛 Re 钩子 wp
这里改一下汇编绕过,或者动调时改一下标志位都可以。sub_7FF6A7F412C0表面是这个。实际上我们动调一下会发现这里的函数被篡改。有个假flag,先字符串定位到判断处。一个rc4,不好动调,直接套个脚本。
2024-04-28 20:30:31 378
原创 第九届中国海洋大学信息安全竞赛 Re 睡Lite wp
可以找到一些字符,经过分析可以猜测sub_48就是类似sleep的减速函数。就算真用芯片也跑不出来,一直sleep。拼在一起可以大致看出flag。往下翻可以找到很多字符。
2024-04-28 20:29:42 447
原创 NSSCTF Round#22 Reverse个人专项赛 WP
是一个魔改的TEA(这里出题逻辑有问题,按给的代码逻辑SomeEncode是v加密得到的,但实际上却要我们解密得到)动调不出来(这里逻辑也莫名其妙,明明这个代码就应该能跑出flag,但实际上是要你把代码反过来写)这里是真正的提示分支,qword_7FF63596A090应当是真实的MessageBox。得到的源码并不完整,但是重要的部分已经有了,就是一个blowfish加密。VM函数抄下来符号改一下,有个地方给的代码还不对,看汇编也是sub。,这并不是字面意义的字符串,而是引用的其他文件。
2024-04-19 20:40:48 1087 4
原创 VNCTF2024 RE yun WP
需要注意的是,JNI_OnLoad 函数是可选的,如果你的本地库不需要任何特殊的初始化操作,你可以省略这个函数。但是,如果你的本地库需要注册本地方法或执行其他初始化任务,那么实现 JNI_OnLoad 函数是很有用的。W8寄存器里依次入栈了0x4F, 0x3C, 0x7F, 0x3D, 0x36, 然后与索引为5-1=4的那个位置的值异或,得到修改后的字符串(考虑到大小端序,脚本是反过来写的)不过这题比较麻烦,native层没有x86架构,不能用虚拟机跑,得用真机,而且有的真机还装不上,动调贼麻烦。
2024-04-11 19:46:23 906
原创 NKCTF2024 re VM?VM!WP
可以看到,每个绿色注入点激活的电子头会向左右两边传导,经过一个异或(输入的字符转化为倒序二进制数,这个数的每相邻两位异或)之后,与蓝色点激活的电子头再次异或,之后得到的信号就会输入下面的向右的二极管结构。可以看到,蓝色电子头总是在循环结构相同的位置上,代表着这个位置上电信号的1和0,将他们连接在一起就相当于组成了一个由0、1组成的key(可以脚本取key,我嫌麻烦就直接手敲了)我们要求的flag是上面一排注入点的0/1状态,加密过程就是我之前说的一系列异或,我们期望得到的结果就是全0。
2024-04-04 18:29:35 1059 3
原创 NKCTF2024 RE 前三道复现
工具:IDA pro 7.5参考博文及APK来源:https://blog.csdn.net/hbhgyu/article/details/81321923https://blog.csdn.net/tabactivity/article/details/78492377一、启动android server_ida 动态调试so。应该是用来显示错误信息。我这里两边都用的7.7的android_x64_server就可以,8.3的不知道为什么不行。ARM的动调比较麻烦,这里用x64的libapp.so调。
2024-03-31 19:33:20 1143 6
原创 《加密与解密》例题 TraceMe64
可以通过动调绕过序列号,也可以根据加密算法逆一个注册机。主逻辑是根据用户名加密得到一个序列号。动调到这里可以直接看到序列号。这里也可以直接改标志位。定位验证一下,是对的。
2024-03-19 20:19:30 294
原创 VNCTF2024 RE BabyC2 WP
这种组合方式通常用于创建一个唯一的日期标识符,特别是当只需要年和月的信息时(尽管这里实际上使用了月和日)。注意,这种组合方式可能会导致一些问题,例如当月的日期大于或等于100时(实际上这是不可能的,因为一个月最多只有31天),或者当使用这种方式与其他以类似方式组合的日期进行比较时。这行代码将SystemTime结构体中的wDay(月中的日期)和wMonth(月份)字段结合起来,创建一个新的整数v3。例如,如果今天是2023年9月15日,那么wDay的值是15,wMonth的值是9。文件要通过流量分析获得。
2024-03-11 17:54:02 514 1
原创 VNCTF2024 RE TBOXs WP
*动态去除混淆的方法**:单步调试时如果ret运行到下一个地址就改为nop,call $+0,同样改为nop,如果ret是跳转到远处的地址就改为jmp +地址,这样以后就可以f5了!**处理思路**:在输入位置下断点找到输入的地址,再在输入的地址上下硬件断点,运行断下来后就可以找到处理flag的位置了。变量的数据类型注意一下,密文别写成char类型的。被混淆的TEA,魔改加了个0x33。这里有个分支,应该要加密判断。密文convert成32位。开头下个断点一直F8。
2024-03-09 15:53:30 441
原创 躺平杯2024 RE WP
SMC一般有俩种破解方法,第一种是找到对代码或数据加密的函数后通过idapython写解密脚本。至此题目是写出来了,但是main函数中的decryption究竟发挥了什么样的作用?SMC的实现是需要对目标内存进行修改的,.text一般是没有写权限的。定位反调试函数返回值的位置,绕过反调试的判断。这里的密钥就是我们输入的内容,根据前面的提示密钥就是第二个flag,长度也符合。在linux系统中,可以通过mprotect函数修改目标内存的权限。换表是下图,注意不要带最后的H,那是下一行第一个字符……
2024-03-09 10:33:15 510
原创 SICTF Round#3 RE WP
v60实际上是指向flag地址的指针,LABEL_4把每一位flag依次存入v22,v23,v24,v25,v26,v27,v28,v29,v30,v31,IpWindowNmae,v73,v54, v55,v32,v33。取的高16位,1010 1001 1111 0001,应该经过了某种加密,大概率只是位置调换,不过只有两个数字,有点难看出来。这里很复杂,似乎是转十进制的一个操作,实际上输入的1和0构成的是十进制,逆序之后按十进制存储。解出来得到一段hint,flag的输入是通过是否的点击表示的。
2024-02-23 15:38:53 2396
原创 西湖论剑2024 RE MZ WP
都是8字节一组,存放了一个字符和一个地址,我们不妨将每8字节称作一个。至于为什么汇编实际上乘8,应该是因为地图里每个元素大小是四个字节,索引时表面的地址是439000,实际上存储的偏移地址439078。Somet1mes_ch0ice这一行,第15位是c,16位是e。为什么*8偏移来索引呢,我们再看一下地图内存里保存的数据。,这四个字节恰好储存了一个地址,就是我们地图的新地址。先看地图索引的汇编(动调之后地址有些变化,无伤大雅)因此在每个循环中,地图首地址都会出现不同的偏移。实际上是把地图的首地址改为。
2024-02-20 19:46:11 568 2
原创 BeginCTF2024 RE WP 剩下的复现
时间戳计数器是一个由 CPU 提供的 64 位寄存器,它以一种非常高的频率(通常是 CPU 的主频)自增。由于其递增的频率非常高,它常被用作一个高精度的时间源,尤其是在需要测量代码执行时间等场景中。后面似乎是base64换表,但脚本跑不出来,这里的算法没搞懂,只能贴一下别的dalao的。应该是以v43作为xtea的key,把v42加密了,加密后的KEY(v42)应该在这。类似CRC的部分需要动调获得key的值,虽然是随机生成的但是其值不变。虽然函数支离破碎,但可以看到rc4的结构,异或的部分做了魔改。
2024-02-17 22:12:46 3001
原创 NSSCTF Round#18 RE WP 完整复现
其中,AOT是 Ahead-Of-Time 的缩写,和 JIT 边运行边编译不同,NativeAOT 直接将 IL 代码编译为目标平台的机器码发布,它的文件大小、启动时间和内存占用均比 JIT 低。z3算一下,SM4的密钥长度只有16字节,设置变量类型时用Int,BitVec会因为位数多导致解出结果过大。用010Editor打开,搜索PE文件头,开头有一个中间有一个,应该是打包在exe里的dll。然后找bucket数组,在Check()函数里发现了一堆方程,用于验证bucket数组的值。
2024-02-16 09:14:29 2485
原创 NSSCTF Round#18 RE GenshinWishSimulator WP
恶搞原神抽卡模拟器Unity逆向,根据经验应该dnspy查看Assembly-CSharp.dll上来看到SM4Gacha是抽卡的意思,这里应该是抽卡的主逻辑Gift内可以看到主要逻辑,以array作为key为偏移(IV),用模式加密input数组,最后保存字符串到flag对象里也就是说如果静态分析直接求flag就是一个SM4_CBC的解密过程,检查一下发现SM4没有经过魔改,应该容易解出。
2024-02-14 22:05:22 879
原创 BeginCTF2024 RE WP 部分复现
start函数往下翻,有一坨赋值,把数据按C键转成代码,去掉花(可能是花搞不清楚)——也并不能还原伪代码,不过可以大致看看。一个个看,点进第三个可以看到两个疑似密文的地址,点进第四个则是触发Handler的部分。主函数看起来是个tea,但是题目都告诉我们not main,说明这个不对。进去,rdx,rcx寄存器里好像有字符串,但是没到cmp,往下走几步。接下来要解密,原代码非常混乱,我们先整理一下,简单去混淆。可能主函数TEA不是假的,又进行了TEA加密。a应该是行数索引,b是输入的字符,经过。
2024-02-07 20:06:11 1446 2
原创 BeginCTF 2024(新生赛道)WP-P1sc3s007
卡版本很恶心,必须下载python3.8再使用pyinstxtractor.py才能提取出作者自定义的一些文件。中间涉及到rc4,但是最后用于比对的key2和str1经过同一个S盒的RC4加密,等于没加密。几个长得像key的几个字符串是有用的,排除干扰之后逻辑非常简单。原本在手搓,但实际上只要找一个编译器跑一遍就可以。几个问答全都没用,看中间关键的几个加密函数。算法不复杂,就是大量的异或,慢慢还原就好。解密的时候记得异或一下key就可以了。还是解不出来,看一下引用的sm4(
2024-02-06 11:16:41 1429 2
原创 NSSCTF Round#17 RE snake WP
F8慢慢往下走,第二个cmp,为了防止它跳转回去,把ZF改成1直接往下走(jnz指令表示“当零标志位(ZF)为0时跳转”)联系到朝雾老师教的打飞机hit-plane那一题,应该通过控制流劫持直接跳转到打印flag的地方。之后可以看到fmt_Fprintf应该是打印flag的位置,下个断点直接F9。控制流劫持可以非常快,当时困在中间的循环里了,其实一直跳到最后就行……第一个cmp分支处,判断轮数,我选择直接改rax的值。一路F8,这里打印了个success!运行一下发现是个贪吃蛇。
2024-01-28 19:38:49 639
原创 i春秋2023冬季赛 RE file_encryptor WP
在使用 CryptEncrypt 函数之前,通常需要先初始化一个 CryptoAPI_BLOB 结构体,然后使用 CryptCreateHashHandle 或其他相关函数来创建一个哈希句柄。如果执行操作的寄存器或操作数的结果不为0,则控制权转移到指定的标签位置。如果执行操作的寄存器或操作数的结果为0,则控制权转移到指定的标签位置。在main函数34行 加密部分往里面找,最后看到一个参数是0xB的,对应加密函数。是一个指向宽字符串的指针,用于存储已知文件夹的路径。这有个花指令,也修一下,和上面的原理一样。
2024-01-26 09:38:12 606
原创 i春秋2023冬季赛 RE upx2023 WP
变换后第1、2、12、13、33位是由原来的“flag{”移动过去的,相应位置的密文异或正确seed生成的密钥流就应该得到相应的字符。进v7看一下,注意按D切换字节模式(这里dq或者dd都可以),不同的题偏移地址字节长度可能不同。Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。14行 可以看到伪随机数种子是根据时间戳生成的,查询一下文件创建时的时间戳然后在其附近爆破。20行的 change函数应该对输入进行了加密,但是静态分析太复杂了。改UPX头脱壳不多说了。
2024-01-26 09:37:25 500
原创 ISCTF2023 RE FloweyRSA WP
yafu-x64 “factor(@)” -batchfile 1.txt //把n复制到txt文件中再分解,用于n过长的情况。版权声明:本文为CSDN博主「网安福宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。第一种:在线因式分解网站,例如factordb.com,我们可以利用在线网站快速分解出p,q。yafu-x64 factor(n) //常规分解n。可以得到e=465,n=3162244531。这里应该是main的头部。这里是一个jmp的花指令。
2024-01-26 09:35:20 428
原创 ISCTF2023 RE ez_flower_tea WP
看一下32行,确实是TEA,有一点改动,v4最后变成负数,写脚本时注意数据类型。密文是v14,v15对应的1115126522 2014982346。向上翻到main_0函数开头按P解析函数,之后F5。输入两个数,32行TEA加密,v13是四个key。根据题目提示也可以知道涉及到花指令和TEA。有花,双击红字到达错误位置直接NOP。密钥是v13的12 34 56 78。delta是1640531527。shift+f12字符串定位。flag格式中间要加个空格。下面给出两个语言的脚本。
2024-01-17 18:23:49 514
原创 ISCTF2023 RE mfx_re WP
Ctrl+F搜索MFX字符,修改头尾的三个。(不一样不要慌,应该是动态flag)密文每一位加一获得原文。
2024-01-16 19:41:11 1401
原创 [NSSRound#16 Basic]CompileMe!!! WP
由于编译过于复杂,应当用python处理巨量信息,筛选出return后面的部分。[NSSCTF Round#16 Basic] CPR-CSDN博客。前面是函数的主体,可以看出是一个魔改TEA解密的函数,变量名做了混淆。由此得到再加密的函数(注意结尾要有return防止报错“附件把我吓坏了,一个极大的C#文件,VS打开直接崩溃了。在Program.cs所在目录下启动cmd,用。接下来是大量的val计算,对每个密文再次加密。参考了石氏是时试大佬的WP,学到很多东西!密文(但是取值时会被再次加密)
2024-01-14 22:37:38 1024 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人