自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 VN2020公开赛-re1

很有意思的一道题,拿到程序尝试运行,发现缺少dll文件尝试下了几个文件也没什么用。打算直接ida分析。拖入ida观察程序的逻辑,定位到main函数__int64 __fastcall sub_140013AA0(__int64 a1, __int64 a2, __int64 *a3){ char *v3; // rdi signed __int64 i; // rcx __int64 v5; // rax __int64 v6; // rax __int64 v7; // rax

2021-03-26 20:17:28 181

原创 祥云杯apk1

拖入jeb分析,分析主要调用的是check函数而不是check1函数ida打开so文件,发现程序直接有check1函数,其中sub_8294函数是check函数,其为JNI_OnLoad中的registerNatives注册的汇编可以找到check函数分析关键函数代码,可以发现程序对我们的输入长度进行了判断是否是22位,然后对其进行了hex转化,接着rc4加密,密钥是flag,最后用DES加密,密钥还是flag,最后和明文0x99EDA1D941316EEA进行对比。要注意是的rc4生成时用到

2020-12-11 08:58:23 226

原创 [网鼎杯 2020 青龙组]singal

这个题目方法有很多,目的是练习算法的分析和vm练习,尝试了静态直接逆算法和动态静态结合的方法方法1拖入ida找到main函数int __cdecl main(int argc, const char **argv, const char **envp){ int v4; // [sp+18h] [bp-1D4h]@1 __main(); qmemcpy(&v4, &unk_403040, 0x1C8u);//拷贝opcode表 vm_operad(&v4,

2020-10-26 21:40:44 794

原创 buuctf-re-[ACTF新生赛2020]Oruga

elf文件,ida分析,定位到main函数开始判断开头四个字符为actf{__int64 __fastcall main(__int64 a1, char **a2, char **a3){ __int64 result; // rax __int64 v4; // [rsp+0h] [rbp-40h] char v5; // [rsp+9h] [rbp-37h] char s2[4]; // [rsp+Ah] [rbp-36h] char s[40]; // [rsp+10h]

2020-10-22 22:32:16 418

原创 buuctf-re-simplecpp

题目无壳,ida定位main分析函数流程__int64 sub_7FF65CDA1290(){ bool v0; // si __int64 v1; // rax unsigned __int8 *v2; // rax unsigned __int8 *v3; // rbx int v4; // er10 __int64 v5; // r11 _BYTE *v6; // r9 void **v7; // r8 __int64 v8; // rdi __int64

2020-10-22 10:40:47 242

原创 buuctf一道比较经典的多线程题目

题目:Younger Driver这个题目比较经典,包含的内容有UPX加壳、反调试、多线程等。不过除了这几个点以外,还有数组的内容我有卡住。peid查壳upx用命令行脱壳没法执行。我用的UPXShell脱壳。拖到ida尝试静态分析。搜索字符串。我们在warning位置发现有反调试的语句。直接修改jz语句为jmp过反调试。同样,warning的函数都可以修改绕过。定位main函数。发现函数创建了互斥体。之后创建了两个线程。一开始打算在最后的函数比较字段。提交发现失败。决定分析双线程。

2020-09-27 11:38:54 213

原创 指针

指针特性指针赋值完全赋值:char* x;x = (char*)10;宽度去掉一个*计算宽度char* a;//宽度为char 一个字节int* b;//宽度为int 四个字节int** c;//宽度为int* 四个字节int*** d;//宽度为int** 四个字节自增自减去掉一个*计算长度int* x;x = (int*)10;x++;//这个时候x为14加一个数,减一个数去掉一个*后的长度乘以数值大小int* x;x = (int*)10;x = x +

2020-09-07 21:33:32 112

原创 逆向基础switch语句

switch语句switch(常数表达式){ case 常数表达式: 语句; break; case 常熟表达式: 语句; break; case 常数表达式: 语句; break; ...... default: 语句; break;}其中表达式为常数表达式,case后的数据可以连续也可以不连续,与编译器的分配有关。汇编语句关键点:jmp dword ptr [edx*4+4110E2h],这是编译器生成的一张表,表中存储case的每种情况(包

2020-08-18 22:13:04 277

原创 pwn初阶(一)

安装环境强烈建议大家找一个合适的帖子安装,避免入坑,这里贴上一个https://www.cnblogs.com/pcat/p/5451780.htmlrip观察汇编代码分析:堆栈分配了0x10长度的栈空间,s的长度是0xf。相当于我们可以将esp的位置覆盖上命令执行的函数system(“bin/sh”);像这样搜索字符串可以发现system函数构造expfrom pwn import *p = remote("node3.buuoj.cn",28486)#远程连接binsh_ad

2020-08-12 19:55:38 249

原创 计算机组成之浮点数

浮点数浮点数的结构各部分的数据内容符号位:(数据的正负号标志)正1负0。尾数部分:转化成二进制后的小数部分,其余尾数补零。指数部分:转化成二进制后,再转化成科学计数法(二进制)。如果是原来数据的左移得到的数据指数部分最高位为1,右移为0,其余七位的计算方法:科学计数法的指数数据大小 -1后用补码计算数值。十进制浮点数转化成二进制1.将整数部分和小数部分分开。2.整数部分除以二取余数,后倒取余数。小数部分乘以二取整数,超过1减1后继续取小数进行相同操作。直到小数为0,然后正着取整数(

2020-08-06 20:41:01 395

原创 导入表注入

导入表注入思路构造新的节表,存放导入表结构,在这之后构造INT、IAT、IMAGE_IMPORT_BY_NAME结构。同时注意FOA到RVA的转化。导入表注入1.创建新节表并移动导入表copy(不需要修复)2.创建导入表之后添加一个新导入表(在新表之后添加一个导入表大小的0作为导入表的结束标志)3.追加INT和IAT表4.构造IMAGE_IMPORT_BY_NAME结构5.赋值6.修正IMAGE_DATA_DIRECTORY的VirtualAddress 和Size需要的函数RVATO

2020-07-29 21:40:59 420

原创 导入表和绑定导入

导入表概述导入表是用来存储应用程序需要的利用的模块以及模块内的函数的结构。记录了模块的信息和函数的信息。结构typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; //指向IMAGE_THUNK_DATA结构 }; DWOR

2020-07-29 16:42:05 371

原创 移动重定位表和模拟windows重定位过程

移动重定位表思路大体上和移动导出表相同,相比而言简单一些,不用寻址三个表。直接复制重定位表的内容即可。可以参照我写的移动导出表的那一篇博文。代码#include <stdio.h>#include <stdlib.h>#include <windows.h>DWORD RVATOFOA(DWORD RVA,LPVOID pFileBuffer){ DWORD FOA = NULL; PIMAGE_DOS_HEADER pDosHeader

2020-07-20 16:50:20 346

原创 移动导出表

移动导出表:思路:添加节之后新建一个句柄用来重新安排结构情况,然后将的句柄的内容写入读入的数据流中。前期知识:fopen()和 fclose()两个函数都是文件操作函数,对数据流进行操作fopen将文件读入一个文件流,文件流就是文件原本的形式。fclose()将文件流关闭。fwrite():fwrite(NewBuffer,pOptionalHeader->SizeOfImage,1,fp);可以直接将内存写入数据流中RVA 和 FOA的转化:FOA->RVA:修改新的导出

2020-07-16 16:15:59 266

原创 重定位表

概述数据目录项的第6个结构,就是重定位表。结构重定位表的结构typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock;} IMAGE_BASE_RELOCATION;typedef IMAGE_BASE_RELOCATION ,* PIMAGE_BASE_RELOCATION;该结构体有两个成员:一个是地址,一个是大小。如下图所示:一个重定位表由多个大小SizeOfB

2020-07-12 17:02:30 606

原创 导出表

1.概述某个DLL中的函数被EXE或者另外的DLL使用需要借助导出表(有的EXE也有导出表)。数据目录项的第一个结构,就是导出表.。2.结构数据目录项的结构这个结构在OptionalHeader的最后一个结构typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;其中 Virtua

2020-07-08 17:38:31 288

原创 静态链接库和动态链接库

静态链接库的使用方式11.将xxx.h 和 xxx.lib复制到要使用的项目中2.在需要使用的文件中包含:#include “xxx.h”3.在需要使用的文件中包含:#pragma comment(lib, “xxx.lib”)方式21.将xxx.h 和 xxx.lib复制到要使用的项目中2.在需要使用的文件中包含:#include “xxx.h”动态链接库的创建方法11.源文件:int _stdcall Plus(int x,int y){ return x+y;}2.头

2020-07-06 18:33:29 149

原创 手动合并节和扩展节

拉伸节1.SizeOfImage扩大2.节区.VirtualSize增大3.节区.SizeOfRawData增大4.内存对齐,文件对齐5.扩大节的大小合并节:1.修改节的数量为1 NumberOfSections = 12.修改节的SizeOfRawData和VirtualSize3.修改节的属性为所有节的属性(都包含)返回对齐大小DWORD AlignSize(int nSecSize, DWORD Alignment){int nSize = nSecSize;if (n

2020-07-02 15:58:23 138

原创 六月DASCTFre方面wp

T0p Gear题目是upx壳,先用upx脱壳后载入ida。观察程序的逻辑。有三个关键check,分别进入观察逻辑。check1(其中sub_401080是相等的比较函数)这段flag的结果就是字符串(注意字符串的顺序)其实看汇编代码更直接一些。check2,这是一个aes加密,对字符串进行加密然后和输入的数据进行比较。可以直接在call这一位置下断,观察rax寄存器的情况。gdb调试下断即可。查看rax寄存器的内容,得到字符串。check3同理拼接起来得到fag c92bb

2020-06-28 19:00:47 363

原创 新增一个Section(代码实现)

#include <stdio.h>#include <stdlib.h>#include <windows.h>#define CALL_X 9 //DEMOCODE中E8的地址#define JMP_Y 14 //DEMOCODE中E9的地址#define NEXT_X 13 //DEMOCODE中X的下一条指令的地址#define NEXT_Y 18 //DEMOCODE中Y的下一条指令的地址

2020-06-24 23:50:47 670 1

原创 手工添加一个节区(简单拷贝)

思路:1) 添加一个新的节(可以copy一份)2) 在新增节后面 填充一个节大小的0003) 修改PE头中节的数量4) 修改sizeOfImage的大小5) 再原有数据的最后,新增一个节的数据(内存对齐的整数倍).6)修正新增节表的属性重点关注的几个结构:1.PE标准头的NumberOfSections2.节区头的VirtualAddress、SizeOfRawData、VirtualSize、PointerToRawData(这些是用来确定在新增节区在文件和内存中的位置,需要考虑偏移量)

2020-06-22 23:48:50 236

原创 在代码空白区添加代码

这段时间跟着滴水三期视频一起学习PE,在这个地方遇到了一些坑。就简答的记录一下。先明确一点。视频里使用的程序的FileAlignment和SectionAlignment是相同的,因此进行地址计算的时候可以不考虑粒度的大小。我们进行添加代码的思路是:1.在空白处载入一段代码。2.修改入口点先执行我们添加的代码。3.自己载入的代码最后跳转到原本的入口点。分析一下需要进行的工作:首先需要判断一下需要载入的位置是否可以使用(这个地方遇到了一个坑,在文件头的空隙中我曾经尝试过多次,但最后修改后仍然没办

2020-06-03 15:43:32 804

原创 植物大战僵尸自动拾取阳光

这篇博客我们主要记录一下植物大战僵尸的自动拾取阳光的功能,主要用到od,我们要简单的掌握寻找call的操作。以及简单的对汇编进行分析。我们先用ce找到跟阳光有关的地址。载入程序,两次搜索数值找到跟阳光有关的地址。点击“是什么改写了这个地址”,找到记录下0043A7F5这个地址,这个地址就是我们载入od要观察的地址。载入od点击ctrl+G弹出寻址对话框,找到0043A7F5地址观察汇编...

2019-10-08 16:06:29 16387

原创 植物大战僵尸无限阳光(包括阳光基址的寻找)

废话不多说,直接上解析。载入植物大战僵尸,用CE载入进程。两次搜索找到动态地址:第一次点击新的扫描,第二次点击再次扫描。点击“是什么访问了这个地址?”查看找到可能的地址,点击十六进制搜索找得到第一个地址,我们发现这还不是基址,我们找到左侧地址比较特殊的一个地址,一般就是基址加上偏移转化成的地址用这个特殊地址点击手动添加地址,点击指针。这是加入的第一个指针。我们接着向下走。继续点...

2019-10-07 22:58:47 3250

原创 攻防世界逆向Reversing-x64Elf-100

这个题整体还是比较简单,只是在分析算法的时候没明白怎样处理提供的字符串。上题。拖入ida满足sub_4006FD条件输出Nice!我们进入关键函数这就不明白了怎么处理这些字符串呢???算法其实是一个模数计数器。用来循环运算字符串。进行编写逆向脚本得到flag...

2019-09-24 22:08:49 853

原创 加密与拆解KeyFile保护

这个题目比较坑,不过最终还是坎坷明白了大体意思。目的:绕过获得KeFile保护我们先把文件提供的bat文件和应用程序文件放在同一个目录中,进行分析算法拖入od,在CreatFileA下断点,点击Check之后停在断点处。寄存器KwazyWeb.bat是载入文件的名称(或者用Procmon软件进行进程检测)继续跟后我们看到je没有跳转到结束的地方。(应该是程序会有名称的检测。含有指定文件...

2019-09-23 18:37:28 341

原创 攻防世界密码幂数加密

题目不难,匆匆忙忙没有想到。文本文档的信息是01248数字组成的。看到题目是幂数加密,百度一下有点不太一样(因为这不是二进制的幂数加密)。之后搜到一种云影密码。是对01248组合构成的密文hhhh正好想要这个。get flag!同时附上云影密码的链接ctf.ssleye.com/?tdsourcetag=s_pcqq_aiomsg...

2019-09-13 14:45:53 4124

原创 攻防世界ReverseMe-120

在这个题目上学到了很多,有参考其他大佬的wp,就简单写一下思路过程。拖入ida,定位到关键变量v13找到关键函数(得到v13的函数)进入发现有很多看不懂的代码。定位(可以根据参数找,也可以根据动态调试)找到关键点发现是base64加密。参考笔记:写出逆向抑或脚本得到再进行base64加密的到flag...

2019-09-11 22:16:19 994

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除