逆向学习3

buuctf通关6-7

xor

6.xor

用exeinfope查看可知文件是64位无壳

195198721a0a4beab52f57aa9c81624f.png

老样子,通过关键信息分析伪代码。

d88180baf25a45149b551a12ed3845d6.png

由代码可知,flag长度为33字节,第二个if语句为异或处理,global为flag异或后的结果。

找到global的值,再进行脚本修复。

584c732f3e2847e784404db9e8ddf8d5.png

得到flag。

代码步骤:1.区分十六进制数和字符串。

2.第一个f既是明文又是密文,直接在后面加上即可。

3.(isinstance用于判断变量类型),利用if语句和ord函数将变量值都变成整数进行异或运算。

4.用chr再转成字符,连接得到flag值。

7.helloworld

apk文件,确定题目为安卓逆向,使用工具jadx-gui进行反编译。

导航flag{,即可找到flag的内容信息。

PE头解析

1.DOS头:

      WORD e_magic;           5A4D              *    "MZ标记" 用于判断是否为可执行文件

      WORD e_cblp;              0090           

      WORD e_cp;                 0003          

      WORD e_crlc;               0000          

      WORD e_cparhdr;       0004               

      WORD e_minalloc;      0000               

      WORD e_maxalloc;     FFFF                 

      WORD e_ss;                 0000         

      WORD e_sp;                00B8         

      WORD e_csum;           0000              

      WORD e_ip;                 0000         

      WORD e_cs;                 0000           

      WORD e_lfarlc;            0040           

      WORD e_ovno;           0000               

      WORD e_res[4];          00 00 00 00 00 00 00 00              

      WORD e_oemid;        0000             

      WORD e_oeminfo;     0000                

      WORD e_res2[10];     20         

      LONG e_lfanew;         00 00 00 08      *        PE头相对于文件的偏移,用于定位PE文件

     

      2.标准PE头

      WORD Machine;                                        8664    *     程序运行的CPU型号:0X0 任处理器/0x14c

      WORD NumberOfSections;                     000F      *    文件中存在的节的总数,如果要新增节或者合并节就要修改这个值

      DWORD TimeDateStamp;                        65B65283

      DWORD PointerToSymbolTable;            0000B800

      DWORD NumberOfSymbols;                   000004D5

      WORD SizeOfOptionalHeader;                00F0

      WORD Characteristics;                              0027

     

      3.可选PE头

      WORD Magic;              *         020B       说明文件类型:10B 32位下的PE文件 20B 64位下的
PE文件

      BYTE MajorLinkerVersion;    02

      BYTE MinorLinkerVersion;    1E

      DWORD SizeOfCode;               *     00001E00    所有代码节的和,必须是FileAlignment的整数倍 

      DWORD SizeOfInitializedData;                      *     00003A00   已初始化数据大小的和,必须是FileAlignment的整数倍

      DWORD SizeOfUninitializedData;                 *      00000A00   未初始化数据大小的和,必须是
FileAlignment的整数倍 

      DWORD AddressOfEntryPoint;                      *     000014E0     程序入口

      DWORD BaseOfCode;                     *       00001000   代码开始的基址

      DWORD BaseOfData;                 *      00400000     数据开始的基址

      DWORD ImageBase;                   *      00000000     内存镜像基址

      DWORD SectionAlignment;      *      00001000    内存对齐

      DWORD FileAlignment;              *      00000200  文件对齐

      WORD MajorOperatingSystemVersion;    0004

      WORD MinorOperatingSystemVersion;    0000

      WORD MajorImageVersion;    0000

      WORD MinorImageVersion;    0000

      WORD MajorSubsystemVersion;  0005

      WORD MinorSubsystemVersion;  0002

      DWORD Win32VersionValue;   00000000

      DWORD SizeOfImage;         *   00017000     内存中整个PE文件的映射的尺寸,可以比实际的值大,但必须是SectionAlignment的整数倍

      DWORD SizeOfHeaders;      *  00000400    所有头+节表按照文件对齐后的大小,否则加载会出错

      DWORD CheckSum;             *   0001A97A   校验和,一些系统文件有要求.用来判断文件是否被修改.自己写的一般为0,把一个pe文件,两个字节里的值,两个字节两个字节循环加,存不下的自然溢出,能存多少存多少,防君子不防小人,是一个可修改的东西

      WORD Subsystem;                *    0003   

      WORD DllCharacteristics;         0000

      DWORD SizeOfStackReserve;       *    00200000   初始化时保留的堆栈大小

      DWORD SizeOfStackCommit;       *    00000000    初始化时实际提交的大小

      DWORD SizeOfHeapReserve;       *    00001000   初始化时保留的堆大小

      DWORD SizeOfHeapCommit;       *    00000000    初始化时实践提交的大小

      DWORD LoaderFlags;       00100000

      DWORD NumberOfRvaAndSizes;    * 00000000   目录项数目

     

    

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值