RE
reverse
43v3rY0unG
逆水行舟。
展开
-
湖湘杯2020 easyre wp
很久没有写题解博客了,最近忙着学习深度学习= =,湖湘杯这道题还是不错的,可以锻炼一下自己动态调试的能力,所以刚好在练习的过程中记录一下,方便以后回顾:首先拿到文件,查壳发现无壳,运行一下大概就是先判断长度,再判断是否是正确flag:长度错误就输出wrong length并退出。拿到ida里看一下,发现没有很明显的入口函数,查找字符串找到input your flag:,找到主函数位置f5看一下,发现没办法反编译,所以我们就直接上动态调试吧:在0x40DA40下断点(f2),f8单步原创 2020-11-10 16:16:39 · 425 阅读 · 0 评论 -
BUU NPUCTF2020
f5发现主函数逻辑很简单,直接找到关键函数进入:void *__fastcall RxEncode(const char *a1, int a2){ void *result; // rax int v3; // [rsp+18h] [rbp-38h] signed int v4; // [rsp+1Ch] [rbp-34h] int v5; // [rsp+20h] [rbp-30h] signed int v6; // [rsp+24h] [rbp-2Ch] int原创 2020-10-05 22:35:29 · 319 阅读 · 0 评论 -
re-for-50-plz-50(MIPS指令)
突然想起很久之前的一个坑没填题目是攻防上的,借着这道题直接把MIPS坑填平拖进ida查看你就会发现它处处都在提醒你,它是一个MIPS文件查看主函数:都是MIPS平台上的指令..看不懂qaq那就有下面两个选择了:1. 恶补MIPS指令——【十分钟教会你汇编】MIPS编程入门(这里再留个坑= =2. 在ida里安装插件——传送门2(ps. 如果直接找函数简单看出逻辑写脚本也不是不行哈:本人毫无疑问的选择了第二种> <,具体安装反汇编等等就去看上面传送门里的原创 2020-09-17 17:30:54 · 235 阅读 · 0 评论 -
逆向angr学习
坑是迟早要填的....前言angr 是一个基于符号执行和模拟执行的二进制框架,可以用在很多的场景,比如逆向分析,漏洞挖掘等。符号执行简单来说就是用符号来模拟程序执行,在我看来就相当于暴力破解,比如一个程序要求你进行一个复杂的运算,每次动态调试只能输入一次,然而符号执行可以尽可能的遍历每一条路径,这样就方便了许多。...原创 2020-10-06 20:20:41 · 1200 阅读 · 1 评论 -
GACTF easyre复现
简单说一下函数逻辑:首先输入38位char型数据过后进行三层加密encode_one, encode_two, encode_three,然后对比在程序里面存放的数据,如果相同则通过,否则就不通过 encode_one:base64编码(啊...这里源码看了好久...算是看到第二层输出并且看了个源码大概然后蒙出来的,换个表就容易懵...base64源码之前看的有点囫囵吞枣,单看源码还有点懵,主要是移位感觉没太学好的样子,最近再仔细学一下写篇博客)encode_two:每13个一...原创 2020-09-17 00:08:35 · 168 阅读 · 0 评论 -
BUU RE部分apk整理(持续更新)
[BSidesSF2019]blink使用GDA打开,main中没什么关键函数,随便翻一下其他函数,找到隐藏的图片base64编码:然后把这部分base64直接转成图片就行了,在线转换网站is here.原创 2020-09-16 17:49:20 · 439 阅读 · 0 评论 -
系统学习vm虚拟机逆向
最近做了两个vm逆向的题,为了理解的更透一点并且动手实践,所以写下这篇博:首先,来说一下什么是vm逆向?vm逆向首先这里的虚拟机往往不是商业的vmp之类的保护软件,而是出题人实现的小型虚拟机,题目本身一般也没有实现某些复杂的功能。基本原理这里的虚拟机当然并不是指VMWare或者VirtualBox之类的虚拟机,而是指的意思是一种解释执行系统或者模拟器(Emulator)。所以虚拟机保护技术,是将程序可执行代码转化为自定义的中间操作码(OperationCode,如果操作码是一个字节,一原创 2020-09-16 00:05:54 · 3402 阅读 · 0 评论 -
GACTF复现 Easyre wp
改栈指针(alt+k),f5反编译主函数:原创 2020-09-13 15:10:40 · 166 阅读 · 0 评论 -
buu[GKCTF2020]BabyDriver wp
好久没做迷宫了.....这题还挺有趣的字符串查找到迷宫,f5看函数逻辑知道是16一行的迷宫,直接找到hex窗口把迷宫找到就行了:函数逻辑:有意思的就是他这里不是ASCII码,因为是sys文件,是由键盘过滤驱动获取键盘扫描码来控制的QAQ(一看就是老司机了....)获取键盘扫描码所以我们就可以知道上下左右分别是IKJL路径就是:LKKKLLKLKKKLLLKKKLLLLLL最后flag是md532位小写:flag{403950a6f64f7fc4b655dea696997851原创 2020-09-10 22:25:39 · 309 阅读 · 0 评论 -
buu [GKCTF2020]EzMachine wp
今天终于沉下心看了一道vm逆向题了...wp我尽量写的详细一点qaqPart1先拖进ida看一下,发现找不到什么关键函数,搜索字符串也搜不出什么。静态不大行我们就动调试试。第一种调试发现程序跳转到0x9B1595,和0x009B1594这一步对比发现0x009B1594会跑飞,所以初步判定它是混淆指令,到ida里把它nop掉。其实nop掉的目的就是把0x9B1595这里创建函数然后反汇编,这样会更好分析一点。直接nop肯定是不行的,会破坏掉0x9B1595这里的代码,要先ida动原创 2020-09-10 16:39:56 · 741 阅读 · 0 评论 -
buu 逆向刷题1
Java逆向解密使用jd-gui打开文件逻辑比较简单,直接上脚本吧exp# -*- coding:utf-8 -*-KEY = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]flag = ''for i in KEY: flag += chr((i^0x20)-64)print ('flag{'+flag+'}')[BJDCTF原创 2020-09-09 13:51:23 · 251 阅读 · 0 评论 -
GACTF复现 Checkin wp
拿到附件,发现输入flag的时候,不输入,直接回车,会有下面的报错:所以直接来到报错中出现的目录下,找到ruby脚本。注意程序运行完之后会删除上面解压出来的那个目录,所以运行程序后,停在输入flag的那一步,接着去找上面的目录中的ruby脚本。AES的ecb模式,有密文和密钥,然后直接在线解密:这个报错有一部分是碰巧碰出来的,正常我们可以用process monitor来监测进程,找到ruby文件,具体见该师傅题解。...原创 2020-09-03 19:10:09 · 226 阅读 · 0 评论 -
buu刷题 GWCTF re3 wp
先拖进ida里f5找到主函数:可以看到sub_402219是一堆数据,这里是SMC自修改代码(异或0x99),去混淆:写一个idc脚本,将数据还原:#include <idc.idc>static main(){ auto addr = 0x402219; auto i; for(i = 0; i <= 223; ++i){ PatchByte(addr+i,Byte(addr+i)^0x99); }}然原创 2020-08-19 20:32:20 · 314 阅读 · 0 评论 -
ida远程动态调试Linux
1 准备在Linux中准备好linux_server/linux_server64,和待调试的文件这里32位文件打开linux_server 64位文件打开linux_server64(其中这两个文件在IDA目录的dbgsrv文件中)2 启动(本文以linux_server64进行讲解)启动linux_server64./linux_server64初次启用在终端输入以下命令chmod +x linux_server64成功后会显示:3 调试器配置在i.原创 2020-08-19 15:18:19 · 1407 阅读 · 0 评论 -
buu刷题 [2019红帽杯]childRE wp
此题可以分为三大块来解考点:二叉树(动态调试)、C++函数名修饰1.首先f5反编译,首先我们要求出outputString(长度为62),逆分析可以知道取outputString字符串的字符,然后对23取余和除数分别在a1234567890Qwer中找到对应位置,其值必须与str1和str2对应位置的值相等上这一段脚本:str1 = "(_@4620!08!6_0*0442!@186%%0@3=66!!974*3234=&0^3&1@=&0908!6_0*&a原创 2020-08-18 23:42:11 · 799 阅读 · 0 评论 -
buuctf [ACTF新生赛2020]Universe_final_answer wp
f5找到主函数,发现关键函数sub_860():点进去看一下函数逻辑:原创 2020-08-13 21:59:16 · 1478 阅读 · 0 评论 -
buu刷题 红帽杯2019-XX wp
首先找到关键函数,找到我们输入的数据经过一系列操作之后得到的,即最终结果(注意小端序存储):把数据dump出来:int a[] = {0xCE, 0xBC, 0x40, 0x6B, 0x7C, 0x3A, 0x95, 0xC0, 0xEF, 0x9B, 0x20, 0x20, 0x91, 0xF7, 0x02, 0x35, 0x23, 0x18, 0x02, 0xC8, 0xE7, 0x56, 0x56, 0xFA };然后就来看一下整个程序对我们输入的数据进行了哪些操作:首先确定字原创 2020-08-11 21:21:33 · 880 阅读 · 0 评论 -
BUU逆向 [Zer0pts2020]easy strcmp wp
拖进ida查看main函数,就是一个简单比较:然后我们就看它对输入的字符进行了什么操作:右移3位相当于除8,也就是把字符串分为8个一组,对应和qword_201060的值做减法,可以得到主函数里显示的字符串注意:内存中存储为小端存储我们只需要写出它的逆过程就可以了:#-*- coding:utf-8 -*-enc = "********CENSORED********"m = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A0原创 2020-08-08 10:34:11 · 1144 阅读 · 1 评论 -
2020网鼎杯 jocker wp(buu复现)
f5之后发现,程序堆栈不平衡,不能直接反编译options——general:在0x401833这里改栈指针偏移,改成0,改成功之后就可以f5反编译了可以看到主函数的逻辑还是比较简单的:关键函数:wrong() omg() encrypt()首先点进去wrong()函数,就是做一个加密,i 是偶数的时候进行异或操作,i 是奇数的时候进行减法操作其次omg()函数,与所给字符串进行比较,这里直接上个小脚本:s=[102, 107, 99, 100, 127, 97,..原创 2020-08-07 22:24:53 · 392 阅读 · 0 评论 -
buuoj 部分逆向wp(持续更新
[FlareOn3]Challenge1点进去sub_401260()看逻辑是base64解密,点开byte_413000发现是换表base64,直接上脚本:expimport base64c="x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"flag=""table="ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"table原创 2020-08-06 10:01:47 · 760 阅读 · 0 评论 -
2020网鼎杯 signal wp(buu复现)
很久之前就想着要复现,结果忘记了...一直拖到现在...找到关键函数:vm_operad()点进去看看:int __cdecl vm_operad(int *a1, int a2){ int result; // eax char v3[100]; // [esp+13h] [ebp-E5h] char v4[100]; // [esp+77h] [ebp-81h] char v5; // [esp+DBh] [ebp-1Dh] int v6; // [esp+DCh原创 2020-08-03 13:54:35 · 322 阅读 · 0 评论 -
CSICTF 部分逆向wp
RicknMorty整个看下来逻辑就是,随机出现两个数,找到他们的最小公因数,然后+3求阶乘。(在30s内算完所有即可)(当时没有用脚本,直接计算器走一波就出来了)附上脚本:from pwn import *from LibcSearcher import *from struct import packcontext.os='linux'context.arch='amd64'context.log_level='debug'sd=lambda x:io.send(x)s原创 2020-07-29 22:36:04 · 363 阅读 · 0 评论 -
buu逆向[ACTF新生赛2020]Oruga wp
首先拿到题目,f5大法,找到主函数14-22行就是在做一件事:让前五位为actf{24行发现关键函数:sub_78A(),点进去看看:看到函数整体结构,两个while循环嵌套,中间四个分支语句,盲猜迷宫...正经来...先分析一波:向下移动:M向左移动:J向上移动:E向右移动:W(没有格数限制)第二个嵌套:0可以移动(一直移动),到达非0位置停止,返回上一位置。左上角为起点,0x21为终点。写脚本也行,手动解也行,因为数据不多:(需要注意的是,这版迷宫只有遇到障碍物才会停)原创 2020-07-22 23:09:03 · 859 阅读 · 0 评论 -
(RE)BUUCTF--[BJDCTF2020]BJD hamburger competition wp
好久没有做到dnspy反编译的题了...这题是.NET写的程序(这个没深入了解过),具体参考Unity游戏逆向及破解方法介绍先是找到Assembly-CSharp.dll文件(在Managed文件夹下),然后在ButtonSpawnFruit里找到主函数:先解sha1得1001,然后md5,取前20位(注意flag要大写...)...原创 2020-07-20 22:27:32 · 512 阅读 · 0 评论 -
【SUCTF2019】SignIn wp
反编译之后发现和RSA算法有关,有关RSA的知识后续填坑.....先来说一下这道题:(先贴出一个Google上找到的pycharm安装pmgy2包的链接:pycharm导入gmpy2包):p = 366669102002966856876605669837014229419q = 282164587459512124844245113950593348271int mpz_init_...原创 2020-04-08 11:01:17 · 682 阅读 · 0 评论 -
[GWCTF 2019]pyre
首先进行pyc反编译,拿到py文件:逻辑比较简单,上脚本:注意第一次异或需要倒序!run一下就拿到flag了原创 2020-04-07 10:49:39 · 757 阅读 · 0 评论 -
【2019红帽杯】easyRE
拿到之后搜索字符串,找到you found me!然后定位所在函数,先根据给出的字符进行加密:得到一个类似提示的东西:继续向下发现加密算法:可以看出是十次base64加密,将明文进行十次base64解密,得到https://bbs.pediy.com/thread-254172.htm,点进去是看雪的一个帖子,你就会发现你被坑了......其实关键函数就在主函数的下面一个函数,...原创 2020-04-06 20:23:58 · 2680 阅读 · 1 评论 -
南邮CTF逆向 480小时精通C++
首先先ida一下,发现程序逻辑比较简单,就是对flag进行了加密:很明显:StringEncryptFunction函数是对flag进行加密的函数,main是主函数,点开看一下函数结构:main函数:(这里要考虑小端序,在对flag进行解密时要把字符串倒过来)StringEncryptFunction函数结构截取:点进去几个函数可以发现其实函数的结构是差不多的,只是有...原创 2020-02-22 12:31:56 · 310 阅读 · 0 评论 -
JarvisOJ RE Classical CrackMe2 wp
Classical CrackMe2真的是学到了很多东西....首先PEID看一下是用C#写的,所以用dnspy进行反编译,找到了关键的类:然后点进去发现了关键函数,即if比较函数:也就是text不为空并且text2等于一个xxxx,在这里下断点就发现text是输入的数据,text2就是每次给出的错误弹窗里面的一串base64,当text2的值等于后面的字符串的时候,弹窗就会显...原创 2020-01-24 13:31:13 · 2851 阅读 · 1 评论 -
JarvisOJ RE部分wp_第三弹
0x09 DD-Android Easy这题和之前做的一题差不多,具体怎么反编译在这里就不赘述了,直接拿到Java代码,上个脚本:(其实这题内部逻辑我没怎么看,大致就是通过异或等操作构造一个字符串吧...)为什么写Java脚本呢,第一是方便的很,基本cc_cv然后改点细节就可了,再就是因为python掌握的不熟练......回去多多学python吧,毕竟py大法好......0...原创 2020-01-06 14:16:19 · 205 阅读 · 0 评论 -
JarvisOJ REwp第二弹
0x04 stheasy拖进IDA,f5大法走一波,发现关键函数点进去:看了一下大致思路不难,就是数组名字写的复杂点而已,点开看看:逻辑不难,直接上脚本:得到flag:kctf{YoU_hAVe-GOt-fLg_233333}记录学到的新知识:IDA选中变量名,按shift+e可以提取变量的值(之前还傻乎乎的自己打上去......),方便的很0x05 爬楼梯...原创 2020-01-05 18:50:05 · 170 阅读 · 0 评论 -
JarvisOJ RE软件密码破解1
0x03 软件密码破解1od逆向还是不太会啊,这题刚好练练手。放到ida里反编译,一看不行,太多函数没办法看...所以拖进od中,先是用引擎插件搜索Unicode,找到一个“你赢了”,然后双击进入这个地址:然后往上翻翻,发现关键函数:就是将输入的字符串和相应的数组异或,然后和已知这些数组比较(cmp函数),如果相等的话,就成功,否则结束函数。mov那一行右键选择数...转载 2020-01-15 20:26:42 · 234 阅读 · 0 评论 -
JarvisOJ RE 部分writeup
0x00 FindKey这题还蛮有意思的,拿到文件之后,有一个小坑,就是要判断它是什么类型的文件,需要怎么转换。拿到ubuntu里面,file一下查看文件类型(这个方法是从大佬的博客上看到的:转载自:https://blog.csdn.net/xiangshangbashaonian/article/details/82598211),然后推测是pyc反编译。(这里插入一个关于p...原创 2020-01-03 15:19:46 · 212 阅读 · 0 评论 -
whaleCTF RE方向部分writeup
0x00 PE格式用PEtools打开,通过查找块数目 0x0004时间戳 0x591D5CCC入口地址 0x0005B789信息标识 0x0103得出flag:BJWXB_CTF{0004h-591D5CCCh-0005B789h-0103h}0x01 WarmUp经过一系列操作,进入compare函数,然后进入分支语句。回头看,若v17和上图中高亮部分相等,则...原创 2020-01-02 21:44:21 · 437 阅读 · 0 评论