Reverse
文章平均质量分 67
Reverse练习和相关知识
OrientalGlass
这个人不是个蓝狗,什么都想写
展开
-
2023强网拟态决赛reverse-keygen题解
这题java层没什么东西,关键逻辑都在libkeygen.so中。原创 2023-12-12 11:10:51 · 266 阅读 · 0 评论 -
Python逆向全版本MagicNumber表
参考pycdc的项目源码。原创 2023-11-25 12:08:48 · 845 阅读 · 0 评论 -
[网鼎杯 2020 青龙组]singal详细题解--VMP 直接逆向,angr模拟执行,ponce符号化
按F9,运行到第二个断点,查看流程图,对着jz指令右键 SMT Solver>Negate and Inject to reach。可以在每条指令处加上打印语句获取指令执行顺序,这个操作仅能大概看一下执行流,自动解密不能靠这个。不获取这个data数组也没问题,因为数据保存在opcode数组中,只要执行流正确就可以。主函数并不复杂,关键内容在vm_opcode中,先提取出main函数中的opcode。如果是赋值14,使用后自减,中间变量chr先赋值后,xyzj等的值变成13。原创 2023-09-12 08:38:38 · 1428 阅读 · 2 评论 -
植物大战僵尸修改器制作--从入门到入土
分享并总结学习游戏逆向的一点经验植物大战僵尸修改器制作入门,主要以C和WIN32编程为主使用了HOOK,远程线程DLL注入,远程线程代码注入等技术原创 2023-08-01 23:48:42 · 1249 阅读 · 1 评论 -
DASCTF 2023 & 0X401七月暑期挑战赛 Reverse部分题解
这里的input定义为QWORD[24] 实际上前4个单元(4*8=32字节)没有被使用,后20个QWORD在循环时强转成DWORD(即40个单元),所以input是个4行10列矩阵,并且每行10个DWORD(实际有效内容仅1Byte)第一个循环是进行矩阵乘法并修改data,第二个大循环是检查data是否为零矩阵,也就是说经过第一个大循环运算后data应该全0。主函数发现不了什么,于是在函数列表逐个探查函数,最终找到一个可疑函数有赋值和矩阵乘法。注意这里是从data[10+i]开始。动态调试观察执行情况。原创 2023-07-23 13:22:04 · 659 阅读 · 0 评论 -
BUUCTF reverse [SWPU2019]ReverseMe解题思路--使用Ponce插件符号化执行
大部分佬都是用动调做出来的,我暂时还没动调出来,意外发现可以用ponce插件符号化input字符串进行求解。原创 2023-07-16 23:17:20 · 288 阅读 · 0 评论 -
安卓手机ROOT和刷机基本操作——以红米Note7刷安卓原生系统并Root为例
学习安卓逆向需要进行调试,虽然之前对测试机root过可以进行一些调试,但是某些软件不能正常运行调试,遂选择刷安卓原生系统(PixelExperience)软件权限(第三方软件) 权限最低,要向用户请求权限用户权限 高于第三方软件,可以进行授权ROOT权限 最高权限。原创 2023-06-20 14:54:45 · 11509 阅读 · 1 评论 -
密码爆破工具HashCat的安装与使用
下载压缩包后解压,在所在文件夹中打开cmd即可。原创 2023-06-10 12:52:15 · 3368 阅读 · 5 评论 -
2023年第三届陕西省大学生网络安全技能大赛--本科高校组 Reverse题解
这次比赛总体感觉很好,比前几天黑盾杯和国赛坐牢要好太多,虽然一些题目没见过,但是在网上查一下就能找到相关文章和工具还要重视理论知识水平,不能做脚本小子,这些题目虽然有现成的工具做,但还是要了解一下相关原理,不然下次变一下就呆住了.例如这个的babypython,以前都是用工具或者脚本直接干pyc文件,这次只能生啃字节码(还好有gpt强大的分析能力),甚至还有很多混淆和跳转代码,也是锻炼到了啃字节码的能力另一方面,个人的经验还是不足,还要继续多做题,多比赛,多复现,勤能补拙。原创 2023-06-03 21:55:14 · 4254 阅读 · 4 评论 -
饶派杯XCTF车联网安全挑战赛Reverse GotYourKey
有一个方法是根据buffer来截取后一段数据,照着程序逻辑分析可以得出buffer分三段,一段是下标0~3,中间一段是topic(stringData),最后一段是messageData。将解密后的dex文件用jadx打开,可以发现大部分逻辑还是和之前的结果一样,最主要的差别就是check函数不同,这里是rc4加密和rc4最后调用的base64加密。再往下看可以看到"goodluck"字符串,这可能是加密密钥,跟进之后可以发现是一个rc4加密。主要在于check方法,跟进可以发现是aes加密。原创 2023-06-20 21:10:07 · 1495 阅读 · 1 评论 -
2023年春秋杯网络安全联赛春季赛Reverse题目复现
下方的call sun_7f006f7c2536就是主函数,跟进重新识别即可看到逻辑(这里不做详细介绍,以选项2为主)往上翻找到起始地址,对loc_loc_7F3BB0FB6536按p识别为函数就可以看到主函数逻辑了。然后还有一些没有被正确识别的函数,需要手动跟进按p识别为函数,然后回到反汇编界面按f5重新识别即可。另外两块红色区域同理,重新识别后可以看到主函数(如果看不到那就对tea函数交叉引用向上找)一直按f7,最后可以发现程序会卡住,并且还能看见InputFlag字符串,这里就是主函数了。原创 2023-05-30 21:05:27 · 1177 阅读 · 2 评论 -
Neepu Sec 2023公开赛Reverse题目复现
可以看到做了对flag的判断,分别截取flag的不同部分并调用不同的check函数最后将加密结果拼接起来并输出结果。text是密文,bytes是密钥,并且可以看到Mode是ECB,PaddingMode是PKCS7。sha256,也就是把上面得到的结果拼接起来进行hash(也可以运行程序通过验证得到flag)最后组合到的掩码Neepu{Pyth0n_1s_a_t?将程序用dnSpy打开后,点击From1,可以找到check1~check5函数。可以发现是C#编写的,使用dnSpy分析。原创 2023-05-22 18:25:57 · 905 阅读 · 0 评论 -
[网鼎杯 2020 青龙组]bang 复现--frida-dexdump安卓脱壳工具的使用
在NSSCTF练习安卓逆向,第一次遇到安卓脱壳题大佬的题解只有一句话"frida-dexdump一把嗦"听起来容易做起来难,还遇到了安卓虚拟机的玄学bug,折磨了我很久,好在最终使用真机成功dump并得到flag如果直接用jadx打开会发现点击MainActivity没有反应。原创 2023-05-16 22:20:46 · 846 阅读 · 0 评论 -
LitCTF2023 Reverse 题解及复现
使用解包工具时要注意环境问题,这题是python3.8编写的,所以要用python3.8的环境,否则会缺少输出文件,建议使用anaconda管理python版本。关键代码是最后一段对flag的操作,不过这里可能是有意为之或者是反编译的问题,意思应该是flag[i]和flag[i+1]的数据异或后互换。经典的base64换表,第10和11行作用重复,12行也没有实际作用,此处的base表根本没有变化。关键就在于Probee代码中调用了check函数,该函数定义在ch中,分析程序逻辑不难写出解题脚本。原创 2023-05-14 22:54:35 · 2176 阅读 · 2 评论 -
C语言实现自动走迷宫 自动输出迷宫路径
最近打的比赛有不少迷宫题,手动走迷宫还是比较麻烦和费眼睛,容易出错,所以就想着写个自动走迷宫的脚本.1.设置了一些枚举变量,如果迷宫的字符不同或者需要的操作符不同可以自行修改全局枚举变量,效果相同.2.迷宫图可以以一行字符串或者矩阵输入.3.由于递归是从终点往回走,所以路径要先保存起来然后逆序输出例子:GDOUCTF2023 Reverse doublegame迷宫题,(P为起点,*为终点)原创 2023-04-21 18:08:31 · 1032 阅读 · 0 评论 -
HZNUCTF REVERSE TMD题解——Themida脱壳,使用unlicense工具
unlicense项目里这条注意当时坑了我,我电脑里只有python3.10(64位),所以当时去搜如何多版本python共存,安装了Anaconda,然后下载python3.9(32位)并配置到环境变量。用unlicense32.exe打开TMD.exe,等待几分钟后会输出unpacked_TMD.exe。后面我试了下删掉32位python的环境变量,这个程序也能使用!脱壳的程序没什么区别,让我很疑惑。由于这个程序是32位,所以需要使用32位的unlicense。ida分析程序: xtea加密。原创 2023-04-15 17:26:12 · 1815 阅读 · 0 评论 -
HZNUCTF MISC Snake题解——python程序逆向,hashcat爆破sha256
使用命令:python pyinstxtractor.py snake.exe在线反编译工具python反编译 - 在线工具 (tool.lu)这里%e8%b4%aa...是url编码,可以用url编码在线解密修复这里使用Kali Linux自带的hashcat,使用命令:其中"-a 3"指定掩码攻击模式,"-m 1400" 指定加密算法为sha256,然后跟上sha256的目标值,最后跟上掩码字符串,花括号内"?a"表示字母或数字或特殊字符原创 2023-04-02 14:27:28 · 1780 阅读 · 1 评论 -
HZNUCTF REVERSE Signin题解——upx壳区段改名修复,动态调试脱壳
这个程序需要下两次硬件断点才能找到oep,老的upx加壳程序上来就可以找到pushad指令,但是这个程序刚运行时没有pushad指令,所以需要先找到pushad所在位置。按f9运行,可以发现程序停在了816f处,这里有popad,栈平衡以及jmp指令(跳转到153f处,很显然是大跳转,应该是跳转到oep)如果直接用upx脱壳会失败,后来才知道这是upx壳改了upx区段名,其实exeinfope这里也找到了upx的特征,已经有过提示。按f8,然后按照上面的操作,再给esp指向的内存单元下一个硬件访问断点。原创 2023-04-02 12:38:56 · 1099 阅读 · 0 评论 -
栈、栈帧和函数调用约定解析
内容后续补充...这两篇文章挺不错的:第一篇介绍了栈的运行原理以及push和pop指令的执行过程通过程序内存布局可以得知,栈是从高地址向低地址增长的简述一下push和pop指令的作用,以32位为例:push eax: //push指令实际上是先开辟空间(也就是调整栈指针)然后再将值压入栈中pop eax : //pop指令先将栈顶的值取出来,然后调整栈指针esp=esp+4。原创 2023-03-15 22:32:58 · 483 阅读 · 0 评论 -
Buuctf [GUET-CTF2019]number_game 题解
⑤judge2()函数实际上是将上一步操作中的内存空间保存的数据视为5*5矩阵,判断每行每列是否有重复元素,也就是一个数独问题。这里的dword_601080单元实际作用是循环计数变量,我最开始也看错了,以为是arr的值++这个函数是递归的将上一步得到的二叉树root用中序遍历的方式存储到arr_stor数组中。也就是说我们按照0-9的顺序输入,实际上会被转换成这样的位置存储到arr_stor数组内。本质上就是判断每行每列是否有重复元素,如果有就错误,所以这是一个5*5矩阵的数独问题。原创 2023-03-09 21:03:41 · 462 阅读 · 0 评论 -
BUUCTF [羊城杯 2020]easyre 题解
对数字和字母移三位,其他特殊字符不变,要求出加密前的字符串,只需要对数字+7再mod10,对字母+23再mod26,有点补码的感觉在。看到主函数的str2大概就可以猜到是base64,ctrl+f12也可以看到存在base64表。进入该函数后大概看一下不难发现是base64加密并且这题没有换表操作。第三次加密是将code2内的数字和字母移3位,其他字符不变。第一次加密是base64加密,得到code1。三.encode_one_base64。五.encode_three。四.encode_two。原创 2023-03-08 14:03:52 · 917 阅读 · 0 评论 -
黄河流域公安院校网络空间安全技能挑战赛 QAQ 题解
这题是对python打包成的可执行程序逆向。原创 2023-03-05 11:00:56 · 580 阅读 · 0 评论 -
Buuctf Younger-drive 题解
②第二条if语句是判断该字符是否为大写字符,如果是大写字符那么在off_418000指针指向的字符表中根据chr-38后的偏移值查表确定字符。这里的0-25是大写字母,26-52是小写字母,所以经过查表操作后,原来的小写字母必定变成大写字母,大写字母必定变成小写字母。当hObject线程交出互斥锁后,轮到Thread线程运行线程函数,很显然这个函数的功能是--count。,如果动态调试会导致原本识别出来的函数和线程名变成红色的JMPOUT(地址)的形式,难以阅读和理解。原创 2023-03-04 21:03:02 · 659 阅读 · 0 评论 -
逆向练习之 mingyue.exe wp
1.这里的pointer_4618和4620是两个相邻的八字节内存单元,其中4620保存的是字符串链表表头head,对于这两个指针在后面有解释(八.p_4618和p_4620_head的功能图解)该函数的基本功能是:每次循环处理链表两个节点的字符,判断字符是否对应等于aV4pY59字符表中的字符(可以根据该字符表反推出输入数据) 如果符合则输出成功的消息弹窗。1.在主函数中,4618和4620初始时指向了一块16字节的空间,并且将该空间的内容置为0。2.调用storage函数后,先申请一块16字节空间,原创 2023-03-03 21:18:59 · 824 阅读 · 0 评论 -
Buuctf [ACTF新生赛2020]Universe_final_answer 题解
显然根据这十个条件可以通过矩阵解线性方程组,这里对变量的命名做了一些调整,让Vi对应flag[i]方便读。首先输入字符串,然后对字符串进行一个判断是否满足条件的操作。如果满足则对字符串进行处理并输出,输出的就是flag。注意这里的x1对应V9,x10对应V0。2.judge_860函数。作为字符串输出后得到。3.运行程序输出flag。原创 2023-02-26 16:29:13 · 644 阅读 · 0 评论 -
Buuctf reverse [FlareOn4]IgniteMe 题解
另外ida可能会把函数参数认为是int类型(由于32位指针占4字节),可以右键使用set call type将int改为char*其中的401020()函数的功能不难发现是返回字符串长度,这里用strlen命名便于理解。v4的初始值由sub_401000()函数赋值,401000中仅有一个rol4函数。这里循环左移四位后再右移一位,最终返回值是0x380004,也就是v4初值。的功能是循环左移,位移时最高位不舍弃,将最高位挪回最低位。比如二进制数据 10000,循环左移2位后得到00010。原创 2023-02-26 15:01:39 · 469 阅读 · 0 评论 -
Python逆向基本操作步骤详解——以杭电新生赛hgame week2 reverse stream(python3.10逆向)为例
即: C:\Users\admin\AppData\Local\Programs\Python\Python310\Lib\site-packages\PyInstaller\utils\cliutils\archive_viewer.py。在文件夹内找到stream.pyc和struct.pyc文件,用winhex或者010editor打开,将struct文件的第一行(Magic head)复制到stream.pyc的最前面,保存更改。继续使用命令即可输出stream.pyc和struct.pyc文件。原创 2023-01-16 01:18:24 · 3916 阅读 · 0 评论 -
BUUCTF re [FlareOn6]Overlong题解,动态调试,进制转换
程序基本逻辑是将byte_252008处保存的数据做解密处理并赋给Text,而sub_251160函数第三个参数是控制解密字符大小的。把char转换成int时,由于char是有符号的,所以int也会补上符号,如果是先转成无符号数再转为int那么没有影响。输出了一堆乱码,这个让我调试了好久,看了其他佬的wp才发现是我的类型转换出了问题。可以发现保存数据的数组有175(AF)个有效数据,而解密函数只解密了28个。将1c改为af,此时显示的是补码形式,不用慌。再保存一下修改后的程序。原创 2023-01-12 22:50:32 · 484 阅读 · 0 评论 -
buuctf re [GWCTF 2019]xxor题解
flag是连续输入6次,每次4个字节,一共24字节,这里a2可能识别为二级指针,有点误导,实际上是当作一级指针使用,可以按键盘上\隐藏掉类型提示。由于flag是int64类型的数组,后续每次取flag[i]的高四位和低四位进行加密处理。加密之后的字符串有一个比较操作,在这个比较函数里面可以通过数学关系求出加密后的字符串值。直接用puts输出解密后的字符串是不行的,因为有一部分字节值为00。根据题目提示,要转成16进制输出,再用16进制转字符串。如果使用逐字节输出也是行不通的,得到的是错误答案。原创 2023-01-11 23:53:50 · 413 阅读 · 0 评论 -
[WUSTCTF2020]level1题解
程序逻辑是对flag保存的字符串加密输出。4.输出flag{d9-dE6-20c}2.ida打开,找到主函数。原创 2023-01-10 21:40:14 · 179 阅读 · 0 评论 -
[BJDCTF2020]JustRE题解
这个是输出BJD{1999902069a45792d233ac},猜测这个就是flag。4.程序逻辑,运行一下就可以看出这是点击19999次才可以爆出flag。2.ida打开,从函数栏看不出什么,shift+f12看看字符串。所以flag{1999902069a45792d233ac}翻到最底下看到了可疑字符串。点进去,按x交叉引用查看。原创 2023-01-10 21:12:55 · 134 阅读 · 0 评论 -
BUUCTF CrackRtf题解
点进去看到sub_401040,在点进去和上一个函数对比可以发现这个是md5哈希加密。运行程序输入对应字符串后,程序会在其所在目录创建一个dbapp.rtf文件。"此时可以知道第一个输入的字符串就是123321,第二个是~!猜测是返回输入字符串例如"123321"对应整数数值123321。32位程序,打开后找到main->main0,即可查看关键代码。这里的一些关键函数都可以百度查windows api查到。点进去找到sub_401230函数。原创 2022-12-29 22:41:47 · 304 阅读 · 0 评论 -
BUUCTF [FlareOn4]login题解
这个算法是rot13算法,加密解密都使用同一个函数即可,只需要把"[email protected]"输入到输入框内,在源码中添加alert(rotFlag)即可打印出解密后的结果。下载打开后是一个html文件,打开按f12查看网页源代码,或者用vscode打开查看文件。原创 2022-12-28 18:52:36 · 857 阅读 · 0 评论 -
《逆向工程核心原理》学习笔记一
1.ollydbg201和110界面设置不太一样,新电脑打开可能字体比较小,有需要修改字体2.ollydbg中编码有unicode16,utf8,ascii,windows系统默认的936gbk编码可能会输出乱码 这里推荐两篇文章彻底弄懂 Unicode 编码,Unicode字符编码3.有两种patch方式修改字符串 ①第一种是直接修改字符串缓冲区的值,这样做并不安全,尽量不要改变字符串长度,可能会影响到后续的代码区 ②第二种是在一块空内存区域写字符串并且修改调用字原创 2022-11-04 11:31:06 · 927 阅读 · 0 评论 -
BUUCTF re luck_guy
查壳64位,打开主函数,点开patch_me查看 点开后继续点get_flag看到关键函数代码解密:得到flagGXY{do_not_hate_me}原创 2022-11-02 22:30:09 · 91 阅读 · 0 评论 -
BUUCTF re SimpleRev
查壳64位,反汇编查看,吧两个判断语句的数值按R转换成字符,可以发现主要的函数是Decry。原创 2022-11-02 15:16:02 · 117 阅读 · 0 评论 -
BUUCTF reverse 不一样的flag 1
【代码】BUUCTF reverse 不一样的flag 1。原创 2022-11-02 14:29:08 · 236 阅读 · 0 评论 -
BUUCTF pyre
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由Python的虚拟机来执行的,这个是类似于Java或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的python是无法执行的。详见什么是pyc文件这是第一次遇见pyc的逆向问题,搜了很多人的文章,见到的都是但是我个人在pyc反编译网站。原创 2022-11-02 08:56:53 · 187 阅读 · 0 评论 -
BUUCTF Java逆向解密 1
【代码】BUUCTF Java逆向解密 1。原创 2022-10-27 21:04:52 · 1266 阅读 · 1 评论 -
BUUCTF reverse helloworld 1
下载下来发现这是个apk文件,这也是第一次遇见安卓逆向的题目,最初想使用虚拟机整安卓逆向,找了教程感觉太麻烦无奈之下还是来搜题解了. 很简单,首先下载一个ApkIDE,解压之后把apk文件拖到apkide打开 在左边依次点开smali com example helloworld MainActivity.smali,即可找到flag原创 2022-10-27 20:55:24 · 489 阅读 · 0 评论