逆向工程
文章平均质量分 60
记录逆向工程学习过程, 打好基础才能致远, 以及CTF-reverse题解
fa1c4
软件安全研究生, 不定期灌水博主(
展开
-
[华为杯研究生创新赛 2023] 初赛 REV WP
华为杯2023 REV WP原创 2023-10-14 03:00:00 · 1250 阅读 · 1 评论 -
BUUCTF reverse wp 96 - 100
至此BUU前100个逆向题打完, 后续的WP可能只出有价值的题目, 并不再按顺序打。原创 2023-10-07 11:52:34 · 1609 阅读 · 0 评论 -
BUUCTF reverse wp 91 - 95
IKUN题Unity逆向, dnSpy反编译, 搜索字符串定位到关键代码验证的密文b64解码后des解密然后和输入的串check, 但是这里的是假的, 用CE动态搜ctrl+B浏览相关内存区域第一个还是假的, 第二个解出来是flag (注意, 在C#中,字符串默认是Unicode字符串,所以转成字节数组,在每个字符字节后都要加一个"\x00"原创 2023-10-07 10:56:11 · 518 阅读 · 0 评论 -
BUUCTF reverse wp 86 - 90
是自定义的VM, 先逆出所有指令xornopmulswap是操作码, 提取出来, 按照刚刚逆向分析出来的指令, 写脚本解析VM代码这里a1是eax,a1+4是ebx,a1+8是ecx,a1+12是edx,a1+16是eip得到vm指令序列, 第一段因为flag长度大于21, 所以不合法. 主要逻辑是第二段人工转等价python代码拿到checklist, 然后逆回去, 注意这里伪代码有点问题, 看汇编来确认。原创 2023-10-07 03:45:00 · 548 阅读 · 0 评论 -
BUUCTF reverse wp 81 - 85
反编译失败, 有花指令有一个无用字节, 阻止反编译, patch成0x90所有标红的地方nop掉之后按p重申函数main和loc_C22, F5成功分成三个阶段分别验证, 第一个阶段是走迷宫, 根据地图从s到#wasd分别是上左下右, xy分别是上下一层二阶段直接爆破三阶段是各种xor处理是大小端序调换, 写逆的时候v8按大端序来储存, 这样逆回去正好对上可以直接逆回去, 需要用到IDA的宏, 这个defs.h头文件可以在ida安装目录下文件夹下找到。原创 2023-10-01 11:00:00 · 742 阅读 · 0 评论 -
BUUCTF reverse wp 76 - 80
四处游走寻找关键代码变表base64, 拿板子秒了。原创 2023-10-01 10:00:00 · 726 阅读 · 0 评论 -
BUUCTF reverse wp 71 - 75
估计是base64, 但是仔细读一下RxEncode函数, 发现是b64解码函数, 拿工具编码一下。原创 2023-10-01 08:00:00 · 708 阅读 · 0 评论 -
BUUCTF reverse wp 66 - 70
反编译的伪码看不明白, 直接动调这里显示"Please input your flag", 然后接受输入, 再和32进行比较, 应该是flag长度要求32位, 符合要求则跳转到loc_E528EE分支继续执行动调之后伪码可以读了checkval可以直接动调出来, 和input处理过后的值进行比较, 全部通过就是congratulation, 需要逆sub_E525C0这个函数, 动调一下猜测是某种加密函数, Findcrypt一下没有明确结果, 继续读一下伪码0x10||=;else;原创 2023-10-01 07:00:00 · 786 阅读 · 0 评论 -
BUUCTF reverse wp 61 - 65
某种decode算法, 直接断点执行查看变量IDA64打开进行分析, 开始这段是在判断flag长度是否为19位下面这段是在判断flag前4位是否在限定字符串范围内下面的函数用findcrypt检测可以知道是加密, 所用秘钥就是flag前4位, 加密后做数据位的置换操作, 这里flag前4位猜测为接着跟一段异或处理, 简单模拟一下就知道是按3的倍数来逐位异或, 比如第21位会和 (v23 < 21 / 3 == 7), 即第0, 1, 2, 3, 4, 5, 6位进行异或, 写逆则反过来进行异或.最原创 2023-10-01 06:00:00 · 217 阅读 · 0 评论 -
BUUCTF reverse wp 56 - 60
此时F5就可以看到解密后的反编译伪代码。原创 2023-10-01 05:00:00 · 191 阅读 · 0 评论 -
BUUCTF reverse wp 51 - 55
shift + f12 找到一个flag{}字符串, 定位到关键函数, F5无效, 大概率是有花指令, 读一下汇编这里连续push两个很奇怪, nop掉下面那个, 再往上找到函数入口, p设置函数入口, 再F5发现string1会经过sub_4013A0中的hash处理, 查MSDN的文档猜测是经过md5处理, 返回的值与0kk`d1a`55k222k2a776jbfgd`06cjjb ^ SS的结果比较查MD5, 得到解密真正flag的shift + e导出unk_423030数据, 写逆。原创 2023-10-01 04:00:00 · 341 阅读 · 0 评论 -
BUUCTF reverse wp 41 - 50
看了下主逻辑, 跟flag没啥关系, 直接shift+f12。原创 2023-10-01 03:00:00 · 231 阅读 · 0 评论 -
BUUCTF reverse wp 31 - 40
脱壳, IDA打开, 发现无法F5, 而且反汇编失败这种情况一般是花指令, 误导了IDA的递归反汇编, 这里是call指令, nop掉按设置main函数入口再即可顾名思义, 走迷宫, dump出迷宫14步内走出迷宫即可Android逆向, jadx打开, 定位到主逻辑查找用例, 找到调用者找到的赋值往下就是native层逆向, 找到base64的输入, 即m方法的输出IDA打开解码, 完事无壳, 但是不能直接F5, 但是逻辑简单, 直接读汇编关键逻辑REV[MRCTF2020]he原创 2023-09-30 03:30:00 · 196 阅读 · 0 评论 -
BUUCTF reverse wp 21 - 30
无壳, 直接拖进IDA32y键把v2改成char[49], n键重命名为iuput0-4位是'ACTF{'最后1位是'}'直接爆破5-20位。原创 2023-09-30 03:15:00 · 230 阅读 · 0 评论 -
ADworld reverse wp easyre-153
做逆向题先查壳, 就像做pwn先checksec一样用PEid查不出来, 用Exeinfo PE可以查出ELF文件的壳用工具直接脱upx壳, kali自带的工具或者手动安装一个windows的upx工具脱壳之后拖入IDA32这是一个linux系统编程的逆向, 需要fork和进程间通信的知识, 系统编程和软件开发是做逆向的基本功, 所以需要补这方面的知识, 就不多说了 (面向搜索引擎做逆向也是基本功, 什么不懂现场学就完了首先fork()原创 2023-09-30 03:00:00 · 186 阅读 · 0 评论 -
[论文分享] DnD: A Cross-Architecture Deep Neural Network Decompiler
DnD 论文笔记原创 2022-12-10 02:45:00 · 855 阅读 · 0 评论 -
[论文笔记] DeepReflect: Discovering Malicious Functionality through Binary Reconstruction
DEEPREFLECT 论文笔记原创 2022-11-16 01:00:00 · 560 阅读 · 1 评论 -
[IDAPython] no module name ‘yara‘
IDA python 缺失 xxx库 解决原创 2022-10-11 13:31:19 · 1185 阅读 · 0 评论 -
[鹏城杯 2022] baby_re
鹏城杯 2022 baby_re 补题原创 2022-07-20 16:17:56 · 379 阅读 · 0 评论 -
ReversingKr-wp(7)
reversingkr 19 - 21 题解原创 2022-07-13 07:30:00 · 168 阅读 · 0 评论 -
ReversingKr-wp(5)
reversingkr 13 - 15题 wp原创 2022-07-13 06:30:00 · 188 阅读 · 0 评论 -
ReversingKr-wp(4)
ReversingKr的逆向题解 10 - 12题原创 2022-07-13 05:30:00 · 302 阅读 · 0 评论 -
[论文分享] Where’s Crypto?
USENIX 2021的一篇二进制代码中密码原语识别的工作原创 2022-07-05 01:00:00 · 1695 阅读 · 0 评论 -
[安网杯 2021] REV WP
如果报dll缺失错误, 在https://www.dll-files.com/下载相应的 32 / 64 bits 的dll文件拷贝到或者文件夹下即可运行无壳, 拖进IDA32, 直接逆main函数主要逻辑是走出地图, 要求步数恰好为50步, 并且往右走10次, 而且往右走之前需要往其他方向走2或者6次, 提取出地图数据打印出地图写一个算法搜索满足条件的路径, 并且找到一个路径需要和MD5值比较, 匹配hash值成功的50步路径即为解这个路径还需要注意, 因为main函数流程中要求往右的次数为10,原创 2022-06-29 02:00:00 · 345 阅读 · 0 评论 -
[论文分享] Augmenting Decompiler Output with Learned Variable Names and Types
概述Augmenting Decompiler Output with Learned Variable Names and Types [USENIX 2022]一句话: 提出基于Transformer模型并在github开源代码上训练的DIRTY技术来改进反编译器恢复变量名和变量类型的质量论文贡献:(1) DIRT: 一个大规模的C代码公共数据集,用于训练模型重类型或重命名反编译的代码,由近100万个独特函数和3.68亿个代码标记(2) DIRTY: 一个开源的基于transformer的神经原创 2022-04-13 04:00:00 · 447 阅读 · 0 评论 -
ReversingKr-wp(1)
着手做ReversingKr的题目, 每篇文章3道题解, 按顺序做下来Easy Crack通过字符串定位关键函数 sub_401080nt __cdecl sub_401080(HWND hDlg){ CHAR String; // [esp+4h] [ebp-64h] char v3; // [esp+5h] [ebp-63h] char v4; // [esp+6h] [ebp-62h] char v5; // [esp+8h] [ebp-60h] __int16 v6; /原创 2021-01-25 22:10:03 · 116 阅读 · 1 评论 -
ReversingKr-wp(2)
Music PlayerReplaceImagePrc原创 2021-04-07 21:08:06 · 138 阅读 · 0 评论 -
ADworld reverse wp - SignIn
执行sub_96A(v8, v9), 处理输入之后存储到v6中, 执行v6 = pow(v6, v5, v4)然后比较v6 == v7 == ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35c复现代码#include<stdio.h>#include<string.h>#include<stdlib.h>char byte_202010[] = {0x30, 0x31, 0x..原创 2021-06-03 11:48:31 · 180 阅读 · 0 评论 -
ADworld reverse wp - debug
.NET, 用dnspy反编译找一圈, 找到提示u got it字符串的关键位置说了是debug, 动调一下, …, flag就出来了flag{967DDDFBCD32C1F53527C221D9E40A0B}原创 2021-06-05 19:37:52 · 96 阅读 · 0 评论 -
ADworld reverse wp - easy_Maze
题目说是maze, 看到step_2的判断, 四个方向100, 115, 119, 97, 分别对应字母dswa, v10是竖直位置, v9是水平位置, 最后congratulations的判断条件是v10 == 6 && v9 == 6, 所以预测是在maze中走到[6,6]的位置就算成功. v10, v9, v8开始均为0, 所以是从[0,0]开始走, 并且每一步都要走在(*a1)[7 * v10 + v9] == 1上. 可以判断这是一个7 * 7的maze, 只有1是可行...原创 2021-06-06 15:54:26 · 125 阅读 · 0 评论 -
ADworld reverse wp EASYHOOK
看来关键函数在sub_401220()里, 其他分支函数都是"not right".识别出关键函数, sub_401000(). 其他函数都是API调用, 不是程序开发者写的, 不考虑.a1是buffer, 即输入的字符串, 经过这个函数的处理, 和byte_40A030[]数组对比, 而数组数据是硬编码在二进制程序里的, 所以可以写逆向脚本了.data = [0x61, 0x6A, 0x79, 0x67, 0x6B, 0x46, 0x6D, 0x2E, 0x7F, 0x5F, ...原创 2021-05-17 19:52:57 · 117 阅读 · 0 评论 -
ADworld reverse wp - Windows_Reverse1
upx壳, 机脱手脱都可以, 这里机脱经过加密和DDCTF{reverseMe}进行对比, 所以逆向加密函数, 这里伪代码看不出做了什么, 直接看汇编, 能判断ecx保存了一个变量, 所以相当于有两个参数使用, v1[v4]是调用a1数组的元素, 元素的值作为下表索引byte_402FF8数组, 保存到v1数组中, v1的值是由ecx寄存器传递过来的, 这里伪代码没有体现, 所以需要读汇编才能得知.调用sub_401000()时操作ecx指向的数组前会执行若干条push指令, 考虑栈帧结构变.原创 2021-05-31 11:59:47 · 107 阅读 · 0 评论 -
ADworld reverse wp - crazy
前言忙里偷闲做一道攻防世界的C++逆向, 最近刷了一遍pipixia师傅的blog, 感觉作为一个binaryer, reverse和pwn不应该割裂开来, 而且之前做了半年逆向, 发现不知不觉间代码能力提高了(最近写代码的时候才发现的), 估计能够读懂反编译的伪码对码力也有训练作用吧, 而且入坑安全1年了, 逐渐体会到逆向是一件很有趣的事情, 以前做复杂逆向的时候总是很急躁, 现在才知道搞技术, 最重要的还是耐心.分析过程直接拖进IDA64 (IDA32弹框提示ELFx86-64, 并且应该养成习惯原创 2021-11-12 13:21:21 · 496 阅读 · 1 评论 -
BUUCTF reverse wp 1 - 5
easyre直接F5flag{this_Is_a_EaSyRe}原创 2021-05-16 11:23:01 · 276 阅读 · 0 评论 -
ADworld reverse wp - babymips
*(&i + i + 4) ^= 32 - i; 其实是对v5数组进行操作. &i + 4是v5起始地址, 观察栈帧得知. 之后对比fdata的5个字节数据再进入sub_4007F0进行检查, 分别处理奇偶两种情况奇数: v1 = (a1[i] >> 2) | (a1[i] << 6);偶数: v1 = (4 * a1[i]) | (a1[i] >> 6);a1[i] = v1再和off_410D04的数据进行对比, 共0x1B = 27个..原创 2021-06-11 16:16:46 · 145 阅读 · 1 评论 -
ADworld reverse wp - notsequence
有两个checkcheck1i取等差数列的和n * (n + 1) / 2, j从0到v5, 累加各元素的值要和2的指数比较1 << v5v5返回第一个为'\0'的2的指数, 或者使得i超过1024的最小数44 * 45 / 2 = 99045 * 46 / 2 = 1035所以v5最大可以取到45, 不过看到后面的判断if(v2 == 20)可以断定v5必须取20check2a2 == v5 == 20如果将a1看成一个二维数组, 因为行是由等差数列索引的, 所以可..原创 2021-06-03 11:47:20 · 116 阅读 · 0 评论 -
ADworld reverse wp - BABYRE
思路很明了, 逆向加密算法.查看judge数组, 数据是硬编码到.data段的, 所以各个异或0x0C即可得到flag, 且flag长度为14.rev脚本judge = [0x59, 0x44, 0x85, 0xE9, 0x44, 0x85, 0x71, 0x0D4, 0x0CA, 0x49, 0x0EC, 0x6A, 0x0CA, 0x49 ]flag = ''for num in judge: num ^= 0x0C ...原创 2021-05-25 22:46:46 · 131 阅读 · 0 评论 -
ADworld reverse wp - Replace
strlen(Buffer) <= 37, sub_401090第二个参数伪代码没有体现出来, 直接看汇编edx是第二个参数a2, 通过main函数的汇编得知edx保存strlen(&Buffer)所以可以判断strlen(&Buffer) == 35, 然后就是通过sub_401090的检测.数据处理逆向sub_401090函数, 不是对称的加密, 所以采用爆破找到flagbyte_402150 = '2a49f69c38395cde96d6de96d6f...原创 2021-06-05 19:37:43 · 156 阅读 · 0 评论 -
ADworld reverse wp - reverse-for-the-holy-grail-350
所以关键函数是stringMod(v9), 其返回的结果影响是否打印出flag, 需要返回非负数__int64 __fastcall stringMod(__int64 *a1){ __int64 v1; // r9 __int64 v2; // r10 __int64 v3; // rcx int v4; // er8 int *v5; // rdi int *v6; // rsi int v7; // ecx int v8; // er9 int v9; ...原创 2021-06-11 17:53:38 · 121 阅读 · 1 评论 -
BUUCTF reverse wp 11 - 20
Java逆向解密java逆向, 用java-decompile逆import java.util.ArrayList;import java.util.Scanner;public class Reverse { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("Please input the flag ); String s原创 2022-01-08 18:40:43 · 1150 阅读 · 1 评论