![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RE
文章平均质量分 52
__ys
无
展开
-
2021 巅峰极客 RE medical_app(结合IDA动调so文件)
medical_app因为比赛的时候队友已经做了这一题,所以赛后才看这道。(呜呜呜。。比赛一道逆向没做起,我太菜了 )从这道题我主要是学习了一下如何用模拟器结合IDA动调apk中的so文件。先说一下如何配置我用的是夜神模拟器7.0.1.3版本注意:模拟器要打开USB调试具体方法如下:打开设置->点击版本号5次进入开发者模式->从开发者选项中找到USB调试勾选上即可我们首先在模拟器的安装目录下打开cmd,输入下面几行命令adb connect 127.0.0.1:6200原创 2021-08-02 22:49:52 · 667 阅读 · 0 评论 -
upx手动脱壳(esp定律手动脱壳)
ESP定律手动脱壳拿到有upx壳的文件后,首先用xdbg打开。然后F9运行到用户代码(有upx壳文件一般为pushed)然后F8单步运行一下,发现右边寄存器esp变红了,因此此处可以使用esp定律接下来按图示方法:F9运行发现popad,它的出现标志着我们的程序可能到达OEP,经验证下方的jmp跳转即为OEP在jmp处下断点,F9运行,F8单步运行,到达OEP之后用Scylla插件进行脱壳,具体步骤如下:第一步点击IAT Autosearch第二步点击Get Import原创 2021-06-02 12:00:17 · 1312 阅读 · 0 评论 -
hgame2021 week3 FAKE
FAKE(SMC)丢进IDA分析,找到check函数发现是求解方程组,这里我们可以用z3约束器来求解,详细可以参考这两篇文章(文章1 文章2)python代码如下:from z3 import *s = Solver()#设置一个解方程的类Solver(必须要设置)v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31,v原创 2021-05-04 19:06:38 · 441 阅读 · 0 评论 -
BUU Youngter-drive wp
Youngter-drive拿到题目,发现有upx壳,先去壳,然后丢入IDA 分析看到这里我们应该先了解一下关于Windows多线程的知识CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程。线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关闭该线程对象。可以看出主函数中创建了2个子线程,我们分别进行分析StartAddress:这里我们回到main函数中打开sub_411190()函数可以找原创 2021-04-22 15:06:17 · 233 阅读 · 1 评论 -
MRCTF 2021 Dynamic Debug
Dynamic Debug(这是除了签到题我唯一能做的了,据说它还是出题人的失误 )得到ELF文件,先用虚拟机跑一下丢进IDA通过搜索字符串找到main函数首先可以得知flag的长度为32,其次当我们继续分析会发现验证函数被添加了花指令,IDA无法识别。这时我们动调一下就会发现动调后的代码发生了变化,可以初步判定为smc。然后就可以找到一段极其像验证函数的代码但是这一部分IDA没有分析,我们找到函数头P一下创建函数发现F5后代码极其不可读,需要平衡一下堆栈,用keypatch在函原创 2021-04-15 20:46:20 · 310 阅读 · 0 评论 -
GKCTF2020 BabyDriver
BabyDriver(.sys驱动程序)拿到文件先丢入IDA由于初次做驱动的逆向,对调用的API含义完全不懂,只知道驱动的入口是DriverEntry(跟main函数差不多)我们直接查询字符串,找到关键部分,发现是个maze问题__int64 __fastcall sub_140001380(__int64 a1, __int64 a2){ __int64 v3; // rdi __int64 v4; // rax int v5; // ecx __int16 *v6; //原创 2021-04-01 21:14:47 · 200 阅读 · 0 评论 -
V&NCTF2020 CSRe
CSRe查壳.NET文件,但打开后发现被混淆用de4dot去混淆在de4dot所在文件夹中打开cmd输入.De4Dot 目标文件所在位置生成的-cleaned文件即为去混淆后的文件用dnSpy打开分析找到与flag相关的代码进行分析经过分析可知进行两次sha1解密后即可得到flag(在线解密网站)flag{1415turn}...原创 2021-03-30 20:56:53 · 133 阅读 · 0 评论 -
攻防世界 serial-150 wp
serial-150(IDA远程动调Linux文件)此题只记录方法,思考分析过程省略…在Linux中准备linux_server64和待调试的文件其中linux_server64在IDA目录的dbgsrv文件夹启动linux_server64代码:chmod +x linux_server64./linux_server64注意:要在linux_server64下打开终端在IDA中选择调试器对调试器进行配置最上方两栏填写待调试文件地址第三栏填写待调试文件所在文件夹原创 2021-02-03 15:29:45 · 280 阅读 · 1 评论 -
攻防世界 simple-check-100
simple-check-100(Linux下的gdb调试)先把exe文件丢进IDA很明显check_key()函数很关键,跟进check_key()函数??? 疑惑,这是能暴力破解的?于是跟进interesting_function()函数发现与输入的key没有关系,而且函数参数是已知的,猜测与flag有关丢进OD中看看由于这里没有开地址随机化,我们根据IDA中main函数的地址就可以在OD中快速找到main函数CTRL+G寻址,下断点将je跳转处的Z标记改为0,跳过chec原创 2021-01-27 13:47:49 · 564 阅读 · 0 评论 -
攻防世界 parallel-comparator-200 wp
parallel-comparator-200居然直接给源代码直接开始分析#include <stdlib.h>#include <stdio.h>#include <pthread.h>#define FLAG_LEN 20void * checking(void *arg) { char *result = malloc(sizeof(char)); char *argument = (char *)arg; *result原创 2021-01-22 20:51:32 · 121 阅读 · 1 评论 -
攻防世界 BABYRE wp
BABYRE丢进IDA,进入main函数很明显judge函数是关键,但显然judge函数被加密了而加密关键在main函数中有所体现很明显这是在调用judge函数之前改变了他的字节码,因此出现调用失败的情况,此时我们只需要用IDA Python进行解密即可代码如下:之后先undefine(快捷键U)一下,再重新创建函数(快捷键P),就可以F5了(此处代码可能与网上其他wp中代码不同,可能是IDA7.5的原因,但经过分析其实是一样的)分析过后发现就是简单的异或,写脚本得到flag即可原创 2021-01-21 20:26:47 · 360 阅读 · 0 评论 -
功放世界 debug
debug拿到exe文件丢进Exeinfo PE发现是.net文件(IDA无法分析),于是通过百度晓得了dnSpy这个神器用dnSpy进行分析,找到相关代码(当知道部分代码段时,可以使用全局搜索找到相关代码)通过简单分析可知这是一个明文比较,于是F5进行调试(这个软件的快捷键与VS相同,不熟悉也可手动),直接得到flagflag{967DDDFBCD32C1F53527C221D9E40A0B}...原创 2021-01-18 14:01:00 · 527 阅读 · 0 评论 -
攻防世界 answer_to_everything wp
answer_to_everything丢进IDA 进入main函数发现not_the_flag()函数很可疑,跟进一下这里发现输入应该为 ‘*’(但这与这道题似乎没什么关系)然后就是木有任何思路,于是我就把这几个字符串都输进去试了一试,发现都不对又看到Submit without any tags于是提交了一下kdudpeh(去掉了**#**),然而还是不行。这时我瞅了一眼题目描述,发现了sha1。我也不知道是啥东西,百度了一下发现这是一个加密算法,于是我把 kdudpeh 在线加密原创 2020-12-21 22:15:35 · 277 阅读 · 0 评论 -
攻防世界 hackme wp
hackme丢进IDA通过shift+F12搜索字符串进入main函数简单分析一波发现flag长度为22,但是接下来 sub_406D90() 很奇怪,很明显是分析不出来的。于是我动态调试了一下发现每一次v7的值都不一样,因此我猜测 sub_406D90() 应该是个随机数函数。这样就好办了。我们理一下思路,发现do while循环就是每次取输入字符串的某个字符,进行一系列操作,判断是否与 byte_6B4270[] 中相同位置的字符相等,不相等则flag错误。由于 byte_6B427原创 2020-12-20 19:48:00 · 150 阅读 · 1 评论 -
攻防世界 Reversing-x64Elf-100 wp
Reversing-x64Elf-100丢进IDA,进入main函数发现flag应该与sub_4006FD有关,跟进一下经过分析,写一手脚本得到flag#include<bits/stdc++.h>using namespace std; char v3[3][8] ={"Dufhbmf","pG`imos","ewUglpt"};string flag;int main(){ for (int i = 0; i <= 11; ++i ) flag += v原创 2020-12-20 18:11:00 · 204 阅读 · 0 评论 -
初步分析简单的汇编代码
初步分析简单的汇编代码一、C语言源代码这里注意一点:目前IDA对C++代码的分析很不友好,因此初学者分析汇编最好是分析C语言,写脚本可以使用C++或Python提供一段简单的C语言代码#include<stdio.h>int getsum(int x){ int sum=0,i; for(i=0;i<x;i++) sum+=i; return sum;}int main(){ int n=10,ans; ans=getsum(n); printf("%d\原创 2020-12-18 22:06:22 · 795 阅读 · 0 评论 -
攻防世界 srm-50 wp
srm-50(学汇编到自闭后做的水题 )拿到exe文件先查壳无壳丢入IDA中首先这里是winmain(),关于这个先普及一下知识因此相关代码与DialogFunc相关以上定义是我在做完此题后问的度娘,在做时并不清楚这些。我们可以直接shift+F12查找字符串address进入DialogFunc中进入后进行F5反编译后发现我猜测第一个if应该是与E-Mail有关,随后在输入框中输入因此密码应该与第二个if有关,写脚本得flag#include<bits/stdc原创 2020-12-13 17:24:32 · 197 阅读 · 1 评论 -
攻防世界 re-for-50-plz-50 wp
re-for-50-plz-50丢进IDA,进入主函数发现无法F5,从网上查阅资料后得知这是一个MIPS代码MIPS也不看不懂啊,只能学一波(推荐:这里)看了一会后发现这不就是个异或吗……其实只需要关注这三部分代码即可(beq是判断$v1 = $v2,如果相等则进入loc_401428)然后就是写脚本了#include<bits/stdc++.h>using namespace std;char a[]={"cbtcqLUBChERV[[Nh@_X^D]X_YPV[C原创 2020-12-09 22:01:03 · 118 阅读 · 0 评论 -
攻防世界 Shuffle wp
Shuffle丢入IDA,进入主函数发现一波随机化,但是题目描述是这就很明显了,分析一下可以知道flag即为上方的数据得到flagSECCON{Welcome to the SECCON 2014 CTF!}原创 2020-12-09 21:04:25 · 114 阅读 · 0 评论 -
攻防世界 Guess-the-Number wp
Guess-the-Number首先得到一个.jar文件,丢入jd-gui中有题目描述以及代码分析可知,输入以下代码可直接得到flagjava -jar 6a8bee79ee404194bb8a213a8a0e211d.jar 309137378注:一定要在.jar文件所在位置输入代码当然此题也可以直接转化为python代码进行字符串异或得到flag(转化为16进制字符串)但是没必要...原创 2020-12-08 21:08:54 · 153 阅读 · 0 评论 -
攻防世界 IgniteMe wp
IgniteMe丢入IDA,进入main函数发现flag是由EIS原创 2020-12-08 20:21:09 · 393 阅读 · 2 评论 -
攻防世界 Mysterious wp
攻防世界 Mysteriousexeinfope查壳发现无壳载入IDA,进入主函数里面有一些没见过的函数,通过百度atoi 是把字符串转换成整型数的一个函数。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。atoi输入的字符串对应数字存在大小限制(与int类型大小原创 2020-12-07 17:41:15 · 359 阅读 · 0 评论 -
立体几何
立体几何(三维迷宫)丢进IDA进入main函数经过分析后发现sub_401014()是正确的结果,因此v21是关键,跟进dword_42B378()函数发现查看dword_427A30[]后发现初步断定是一个迷宫,而且根据可以确定这是一个7 * 6 * 5的三维迷宫(注:这里2*a1与C语言中的补齐字节有关,实际表示含义与前面数组含义相同)写脚本跑出flag根据前面可以看出起点是‘R’,终点是‘A’。向上:‘s’,向下:‘w’,向前:‘d’,向后:‘a’,向左:‘k’,向右:‘j’原创 2020-11-16 00:12:31 · 272 阅读 · 0 评论 -
攻防世界 maze wp
maze(二维迷宫问题)丢进IDA通过对这两处的分析可知是一个二维数组(8*8)即可看做之后对源代码进行分析__int64 __fastcall main(__int64 a1, char **a2, char **a3){ signed __int64 v3; // rbx signed int v4; // eax bool v5; // bp bool v6; // al const char *v7; // rdi __int64 v9; // [rsp原创 2020-11-14 13:23:59 · 130 阅读 · 0 评论 -
攻防世界 csaw2013reversing2 wp
csaw2013reversing2——第一个动态调试题目首先运行程序发现是乱码由题目知运行就能拿到flag,那就直接载入OD动态调试一直F8单步运行来确定弹窗的位置发现执行到这里时出现弹窗于是下断点后,F9直接运行至断点,F7进入call,然后F8单步在这里发现jnz未跳转,je跳转(有关跳转知识请见这里)此后分析可知程序执行的是错误路径,于是把断点改在jnz处并通过修改Z标志位让他跳转(jnz是当Z标志位为0时跳转)继续F8单步运行到int3处发现退出,重载程序并将它nop掉(原创 2020-11-14 13:24:05 · 219 阅读 · 0 评论 -
攻防世界 no-strings-attached wp
no-strings-attached丢进IDA进入main函数后发现主函数极其简单经过初步分析后会发现authenticate()是关键,跟进一下此时我们可以得出flag与s2有关,于是跟进decrypt()通过分析可知:需要得知s[]与a2[]数组的值写脚本(IDApy很好用) 借鉴某wp(主要是自己写的没了,懒)之后就是写脚本得到flag了9447{you_are_an_international_mystery}...原创 2020-11-14 13:24:13 · 169 阅读 · 0 评论 -
攻防世界 python-trade wp
python-trade第一道python反编译的题目得到.pyc文件将.pyc文件反编译得到.py文件(可以使用https://tool.lu/pyc/)分析代码我们发现程序对flag进行一系列操作使其变为’XlNkVmtUI1MgXWBZXCFeKY+AaXNt’因此我们只需要反过来执行即可此处注意:在python2中使用ord(i) - 16不会出错,在python3中使用会出错这是因为ord()这个函数接受的类型是一个长度为1的字符串,而在python3当中传入的i已经是一个原创 2020-11-14 13:24:26 · 231 阅读 · 0 评论 -
攻防世界 getit wp
getit丢进IDA进入主函数通过分析可得 t[]为flag(似乎是猜测 )又发现其与s[]有关写个脚本模拟一下#include<bits/stdc++.h>using namespace std;char s[]={"c61b68366edeb7bdce3c6820314b7498"};char t[100];int v5=0,v3;int main(){ while ( v5 < strlen(s) ) { if ( v5 &原创 2020-11-14 13:24:32 · 156 阅读 · 0 评论 -
攻防世界 re1 wp
re1(真入门 )丢入IDA分析得知v9是输入的flag,然后将v5与v9进行比较,相等则输入flag get因此v5即是所需flag追踪v5回到main函数后发现、movdqu xmm0, ds:xmmword_413E34movdqu [ebp+var_44], xmm0为对v5的赋值于是进入xmmword_413E34然后就是讲16进制转化为字符串得到flag(因为汇编里面存储字符是采用小端格式,所以结果倒过来输就行)DUTCTF{We1c0met0DUTCTF原创 2020-11-14 13:24:38 · 140 阅读 · 0 评论 -
攻防世界 Hello, CTF wp
Hello, CTF从题目可知flag一定加密或者编码过丢进IDA中分析发现sub_40134B((int)aSuccess, v7);通过对程序的分析可以得出v13即为flag然后就是将16进制转化为字符串类型,贴一个Python代码(也可在线转化 )x='437261636b4d654a757374466f7246756e' y='' i=0while(i<len(x)): y+=chr(int(x[i:i+2],16)) i+=2print(y)原创 2020-11-14 13:23:37 · 223 阅读 · 0 评论 -
攻防世界 game wp
game运行exe翻译一下发现是需要让/都变成-(0变为1)此时我熟练的输入12345678结果得到了flag2.丢进IDA发现sub_457AB4()可能与flag有关,跟进一下发现发现flag可能与异或运算有关(异或的逆运算也是异或)写一个cpp#include<bits/stdc++.h>using namespace std;char v59[]={18,64,98,5,2,4,6,3,6,48,49,65,32,12,48,65,31,78,62,32,49原创 2020-11-14 13:24:43 · 162 阅读 · 0 评论 -
攻防世界 insanity wp
简单的题目先把文件丢进IDA进入main函数后发现strs[]可能与flag有关,跟进一下发现猜测9447{This_is_a_flag}与flag有关 (shift+F12可查看main函数的字符串形式)最后确认flag为9447{This_is_a_flag}原创 2020-11-14 13:24:55 · 133 阅读 · 0 评论 -
攻防世界 logmein wp
一个基本的算法逆向拿到文件后直接丢到IDA中发现程序需要运行到sub_4007F0()对应的是正确的flag此题主要考察如何将long long型转化为字符串(写代码,强制类型转化就直接出来了 手动转换详见此处)#include<bits/stdc++.h>using namespace std;char v8[8];long long v7=28537194573619560;int main(){ char *a=(char *)&v7;//将v7转化为字符串原创 2020-11-14 13:25:01 · 240 阅读 · 0 评论 -
攻防世界 simple-unpack(脱壳)wp
第一次接触被加壳的二进制文件查壳准备工具:exeinfo pe, IDA, upx首先用exeinfo pe查壳发现有upx壳注:windows下的文件是PE文件,Linux/Unix下的文件是ELF文件查壳在upx-3.96-win64路径下用upx -d进行脱壳3丢到IDA中搜索字符串flag可以轻易得出结束自己的第一道被加壳的二进制文件题目...原创 2020-11-14 13:25:09 · 431 阅读 · 0 评论 -
第一份RE题:maze 解题思路
入坑后第一份mp下载后打开:随便输入一个flag:按照正常解RE题的思路用IDA反编译一下并搜索字符串give me your way:通过一系列操作得到类似C语言代码(当时看也是一脸懵逼 )耐心分析一下… …v8=217v8与输入的flag相关v6='E’时会得到正确结果且v6与byte_42E820[v8]相关然后就理所应当的发现byte_42E820[]这一数组,点进去后此时如果学过oi的可以用dfs或bfs搜索得到正确的flag。(或者直接手动模拟即可得到flag)最原创 2020-12-13 17:54:09 · 286 阅读 · 1 评论