reverse-[GWCTF 2019]re3-AES加密
情景再现下载先查壳 然后运行一下
没啥好看的 拖入ida64分析
然后也打不开 F5 然后space看下汇编窗口
显然有问题 需要修复 这儿用到了idc脚本执行
不懂去Google 不多赘述了
从开始的地址按D 转化为data
shift + F2 打开 内置脚本命令行
执行脚本Run
12345678910#include <idc.idc>static main(){ auto addr = 0x402219; auto i; for(i = 0; i <= 223; ++i){ PatchByte(addr+i,Byte(addr+i)^0x99); }}
然后
依次按c (机器语言变汇编) p(创建函数)
这个call成功修复了
跟入40207B (双击603170发现没有值 应该是个关键值)
跟进401CF9
跟进call 笔者没看懂 后来了解是MD5加密
这是MD5特征码
(603120是个标准base64表)
看不懂我们就分析外面这个call
这样看着好一些 - ...
reverse-[羊城杯 2020]easyre
情景再现先查壳
然后X64dbg运行一下看看 顺便看看字符串
看到了base64的特征 (难道真就base64这么easy——re嘛)
拖入ida64分析一下
一看 哦 原来有是个加密call
第一个 就是正常base64加密
(不确定的话可以动调 试一试)
第二个 仔细看看 是重新排序了一下字符串
13个为一组(刚好密文52个字符 正好4组)
第三个call 是Caesar加密
当然可以直接逆算法写 很好写的
贴exp
12345678910111213141516171819202122import base64encData = 'EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'encData1 = ''# caesar 加密for i in encData: if 47 < ord(i) <= 57: encData1 += chr((ord(i) - 48 - 3) % 10 + 48) elif 96 < ord(i) <= 122: ...
reverse-[Zer0pts2020]easy strcmp
前言本来写了好几个的(都挺简单的)但是上传失败了
好烦 就没再搞 然后的话又因为今天要期末考试
所以就找一篇我觉得有用的上传吧
Orz
[Zer0pts2020]easy strcmp这题 挺新颖的
打开是个Linux的压缩包 放到虚拟机解压
拖出来 查壳
然后运行一下
回显看不懂
拖入ida64分析
奇怪了 啥也没调用
怎么整 不慌 随便翻翻看看
翻一下左面函数栏
其实没有这么麻烦 了解函数调用的约定就能知道
为什么先调用init了 –由右向左传入
发现先调用的init函数
跟进去看看
这几个函数都看看 然后跟如889 发现了两个call
都看一下 发现795有用
跟如795
然后看到这个是 strcmp call
这样就知道了 strcmp调用了6EA这个函数
那这个就是关键call了
跟入6EA
然后 应该就了解怎么回事了吧
贴exp
1234567891011121314151617181920import binasciicipher = 'zer0pts{********CENSORED********}'encData = [ ...
reverse-buuctf刷题记录1
[FlareOn4]IgniteMe查壳
拖入ollydbg运行一下程序 顺便看字符串
没啥特别的 拖入ida分析
看字符串 跟踪主函数
跟入4010F0 - 去除\n \r这俩字符
跟入401050
这个里面就是密文倒过来 ^ v5
然后v5不知道值 跟入401000
看不懂 我去动调了一下 得到v5 = 4
动调的话 找到401000这个call运行就知道啦
贴exp
1234567891011encData = [0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E, 0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13, 0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69]flag = ''arr1 = []v4 ...
VNCTF2023逆向区WriteUp
babyAnti下载附件 是个apk文件
对于这类文件 都先放入模拟器运行一下看是否有切入点
然后可以使用jadx去看源代码
或者也可以解压出来找到.so文件拖入ida进行分析
打开模拟器 先运行一下(笔者是用的夜神模拟器)
如何下载去Google搜一下就好了
发现是个小恐龙游戏
(就是哪个没网时浏览器的哪个放松-摸鱼游戏)
然后需要3000就会给flag 看着挺简单
Setting里面没啥东西 不影响
然后去下载一个GG修改器
如何打过最近的RealWorldCTF体验赛的话应该就会马上找到切入点了 和哪个贪吃蛇游戏 很类似
(先说一句 比那个难点 ,可能是笔者太菜了 想了半天 )
这里笔者推荐下载GameGuardian.101.1_for_Nox_Bluestacks-GDaily.org
这个版本 适配于夜神的
找到分数的代码 发现挺多 不过类型不一样
先改改试试
发现 有反作弊检测 好烦 (没整过 怎么办)
大致猜测了一下 用过ce (改加密数据) 的应该能猜到的
应该是相同地址类型byte的改成0/1是反作弊的
dword qword类 ...
reverse-[MRCTF2020]Xor
情景再现查壳
然后运行一下程序
老规矩动调运行(能够顺便看下字符串 有无切入点)
拖入ida(一般打开后都会直接停在主函数出)
字符串跟踪 交叉引用找到主函数
发现无法反编译 看看 汇编
跟进401020 可以发现类似反调试的混淆
然后返回再次反编译
啊?竟然可以了 (笔者太菜啦 不知道是因为什么造成的 )
有大佬知道原因 希望可以赐教Orz
修复一下代码 发现入题目一般
就是一个简单的xor
贴exp
12345678#include<iostream>using namespace std;int main(){ int c[] = {0X4D,0X53,0X41,0X57,0X42,0X7E,0X46,0X58,0X5A,0X3A,0X4A,0X3A,0X60,0X74,0X51,0X4A,0X22,0X4E,0X40,0X20,0X62,0X70,0X64,0X64,0X7D,0X38,0X67}; for(int i=0;i<33;i++)cout << (char)(c[i]^i);}
123456encData = ...
reverse-[ACTF新生赛2020]usualCrypt
情景再现查壳
运行程序 直接ollydbg 运行 顺便看下字符串 有无切入点
发现了类似base64的踪迹 但是好几个 应该有说法
以及 一串类似密文的东西
笔者 动调了一会并没有发现非预期的解法(因为笔者是个大菜鸡)
其实完全没必要动调的 直接静态分析更容易理解
拖入ida静态分析
看过字符串了 所以直接跟踪主函数就好了
跟进401080查看 发现经过了三个加密
跟进第一个 很容易发现是换表操作
新表exp
12345678T1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'baseT = list(T1)for i in range(6, 15): baseT[i] = T1[i + 10] baseT[i + 10] = T1[i]print(''.join(baseT))# ABCDEFQRSTUVWXYPGHIJKLMNOZabcdefghijklmnopqrstuvwxyz0123456789+/
然后就是这一大坨base64了
base64 原 ...
reverse练习-手托带混淆的upx壳
xiongtong-情景再现首先查壳 发现 没见过的东西(我没见过)
elf文件我了解的不多 (我是个菜鸡)
大概是种混淆类的吧
正常程序
加壳的程序
所以 可以发现没查出来壳 但实际是有壳的
继续看下文也会发现 其实加了混淆
先运行文件看是个什么程序
用ida64打开进行分析
然后决定使用远程调试
小谈一下如何远程调试
然后找到虚拟机的ip 指令ip addr (不行的话也可以ifconfig -a)
然后这样 很简单的
运行起来就是这种状况
好的 回归正题
做题就是猜 感觉应该是种压缩壳
《入口》在这 然后开始手动脱壳
大概就是一顿F8, 遇见回调 就CTRL N 跳到下一行指令处
看到这几个字符串 好熟悉 对 就是i程序运行所看见的东西
主函数找到辣
然后推测 那个字符串就是密文
一直走到这 就会找到 真正的程序入口
运行 试一试
发现确实有切入点 跟踪密文字符串(双击跟踪)
发现找到了base表 并且是base64
那么接下来 就简单了
(如何提取? 我做的时候是用sublime弄得 很快)
欧克 本 ...