后记:2020西湖论剑逆向babyre的wp

2024-01-09 11:08

本文主要是介绍后记:2020西湖论剑逆向babyre的wp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个题目对我而言太难了,比赛的时候只做了个crypto简单题和逆向的flow,这个babyre没时间看,赛后花了2天才搞出来。
题目是个PE32的可执行程序,体积挺大的,调试的时候一直报非法指令,应该是有反调试的措施。
用x64dbg也是一样,看来动态调试这条路是走不通了,干脆耐心的分析代码。
首先根据报错,查到主程序逻辑是在sub_1543D0里:
在这里插入图片描述
这里是一个虚机,具体代码在开头会有初始化:
右边注释是我手工写的

0x01, 0x63, 0x00, load strings 0 & output
0x01, 0xF6, 0x01,  load strings 1 & output
0x02, 0x23, 0x33,  scanf
0x06, 0x11, 0xAC,  strlen
0x08, 0x06, 0xC3,  push 0x20
0x05, 0xE6, 0x2E,  memcmp
0x12, 0x03, 0xE2,  if = then continue
0x09, 0xBD, 0xEC,  pop
0x09, 0x23, 0x5C,  pop
0x09, 0x17, 0x2C,  pop
0x10, 0xF2, 0xED,  StringToDwordArray
0x04, 0xFF, 0x2A,  encrypt
0x08, 0x05, 0xAD,  push var5
0x05, 0x98, 0x7A,  strcmp
0x07, 0x03, 0x02,  if = then print

可以看到,最核心的是第4个功能模块,就是encrypt函数,让我们进去看下:
在这里插入图片描述
可以看到,这里有些数据插到函数中,而不是代码,后来再仔细分析启动过程,发现有这样的函数:
在这里插入图片描述
正常情况下程序不被调试是IsDebuggerPresent返回应该是0,就会进入sub_99C936:
在这里插入图片描述
看到这里就很明显了,是一个自调试的程序,代码中插入的数据都是"\xC7\x23"开头的,这里也有校验,同时会对执行的异常进行处理,再查到异常处理的函数:
在这里插入图片描述
函数基本功能是取异常时的上下文,同时读取异常时的指令字节,根据第三个字节来进行不同的操作,同样又是虚拟机!
经过一番耐心的分析(手撸~),得到之前报错sub_9a6f70函数的虚拟代码:

edi=输入内容转dword数组
loc_156F96:
C7230DD0		push edx
C7230CE0		pop  eax
C7230DE0		push eax
C7230CF0		pop  ebx
C7231701000000	push 1
C7230CB0		pop  esi
C7230EF0B0		add  ebx,esi
C7230DE0		push eax
C72326			pop dword1;push edi+dword1*4
C7230CE0		pop  eax
C7230DF0		push ebx
C72326			pop dword1;push edi+dword1*4
C7230CF0		pop  ebx
C7231DE0F0		xor  eax,ebx
C7230DE0		push eax
C7230DD0		push edx
C7231F			pop dword1;pop [edi+dword1*4]
C7230ED0B0		add  edx,esicmp     edx, 1Fhjnz     short near ptr loc_156F96push    4mov     eax, [ebp+8]push    eaxcall    sub_14BA3Badd     esp, 8C7230DE0		push eax
C72317EFBEADDE	push 0xdeadbeef
C7230CE0		pop  eax
C7230EE0E0		add  eax,eax
C7230FE0E0		sub  eax,eax
C7230DF0		push ebx
C7231714451100	push 0x00114514
C7230CF0		pop  ebx
C72313E0F0		or   eax,ebx
C72342E0		not  eax
C72310E0F0		mul  eax,ebx
C72314F0E0		ebx%=eax
C72312E0F0		and  eax,ebx
C7230CF0		pop  ebx
C7230CE0		pop  eax

后一部分没啥用,应该就是增加逆向的工作量,前面一部分逻辑就是

for i in range(31):flag[i]^=flag[i+1]

然后进入加密的核心了(激动~,其实里解开题还早)
在这里插入图片描述
sub_99C5EE是核心中的核心:
在这里插入图片描述
居然还TM有伪代码,继续分析,详细代码我就不贴了,太长,基本逻辑就是分四轮把32个输入的字节转成每轮两个dword数,然后用两个随机种子0xDEADBEEF和0xAA114514产生2个随机数,对其进行加密,其中还有最大的一段伪代码写的加密处理部分enc2,最后根据逻辑写出exp如下:

def enc1(x,y,z):v5=((x<<z%32)^x^(x>>y%32))&0xffffffffv6=(v5^z^(y&v5|~v5))&0xffffffffv7=(v6^y^(z&v6|~v6))&0xffffffff
#    print(hex(x),hex(y),hex(z),hex(v5),hex(v6),hex(v7))return v7def enc2(x,y,z):v5=x^y^zv6=(v5<<((y+z)%32)|v5>>(32-((y+z)%32)))&0xffffffffv7=(v6^(v6&(v6>>1)))&0xffffffff
#    print(hex(x),hex(y),hex(z),hex(v5),hex(v6),hex(v7))return v7def swap(x):x = (2 * (x & 0x55555555) | ((x & 0xAAAAAAAA) >> 1))&0xffffffffx = (4 * (x & 0x33333333) | ((x & 0xCCCCCCCC) >> 2))&0xffffffffx = (16 * (x & 0xF0F0F0F) | ((x & 0xF0F0F0F0) >> 4))&0xffffffffx = (((x & 0xFF00FF) << 8) | ((x & 0xFF00FF00) >> 8))&0xffffffffx = ((x << 16)| ((x & 0xFFFF0000) >> 16))&0xffffffffreturn xa=0xdeadbeef
b=0xaa114514
t0=[]
t1=[]
for i in range(512):t0.append(a)t1.append(b)v11=0for j in range(32):v11^=(a&(1<<j))>>ja=(v11^2*a)&0xffffffffv11=0for j in range(32):v11^=(b&(1<<j))>>jb=(v11^2*b)&0xffffffffresult=[0x31, 0x86, 0x5F, 0xDF, 0xD5, 0x56, 0x45, 0x71, 0x12, 0x5F, 0x7A, 0xD9, 0xBF, 0xBC, 0x59, 0x12, 0xCD, 0x43, 0xCA, 0xDC, 0xF4, 0xB3, 0x53, 0xA6, 0xFA, 0x8E, 0x89, 0x1A, 0x74, 0xFC, 0x03, 0x16]
flag=[]
for j in range(4):v0=(result[3+8*j]<<24)+(result[2+8*j]<<16)+(result[1+8*j]<<8)+result[8*j]v1=(result[7+8*j]<<24)+(result[6+8*j]<<16)+(result[5+8*j]<<8)+result[4+8*j]for i in range(511,-1,-1):a=t0[i]b=t1[i]v1=swap(v1)v0=swap(v0)if i%128>0:v3=enc1(v1,a,b)else:v3=enc2(v1,a,b)v4=v0^v3v0=v1v1=v4
#    print(hex(v0),hex(v1))flag.append(v0&0xff)flag.append((v0>>8)&0xff)flag.append((v0>>16)&0xff)flag.append((v0>>24)&0xff)flag.append(v1&0xff)flag.append((v1>>8)&0xff)flag.append((v1>>16)&0xff)flag.append((v1>>24)&0xff)for i in range(31):flag[30-i]^=flag[31-i]
print(''.join(chr(i) for i in flag))

运行结果
在这里插入图片描述

这篇关于后记:2020西湖论剑逆向babyre的wp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586897

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

转:android ro.debuggable属性调试修改(mprop逆向)

android ro属性调试修改(mprop逆向)      大家都知道如果需要调试android 的程序,以下两个条件满足一个就行。第一是apk的配置文件内的AndroidManifest.xml的 android:debuggable=”true”,第二就是/default.prop中ro.debuggable=1。两种方式第一种通常是解包添加属性再打包,随着加壳软件以及apk校验等,容易出

某里227逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解阿里227版本滑块参数n的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有需要可联系我。 一

【MyBatis学习14】MyBatis的逆向工程生成代码

1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。 2. 使用逆向工程 使用mybatis的逆向工程,需要导入逆向

js逆向--cai招网

js逆向--cai招网 一、寻找加密入口1、抓包2、关键字搜索寻找加密入口 二、调试js三、python代码实现 一、寻找加密入口 1、抓包 目标数据来源网址为:https://search.bidcenter.com.cn/search?keywords=%E5%85%AC%E5%85%B1%E4%BD%8F%E5%AE%85,打开开发者工具进行抓包。 目标响应数据被加密。

NRF51822 小黄车智能锁 逆向工程

笔者在夜跑时发现有人将拆下的小黄车智能锁丢弃在花园角落,于是萌生了拆解的想法。 拆开外壳后发现MCU 是NRF51822 ,并且预留了Jlink 调试接口,更萌生了逆向这个电路板的想法 下面是 各个智能锁厂家提供的方案: 摩拜单车:STM32F1+GSM+GPS 使用芯片 STM32F401 + NRF51802(BLE)+TD1030 泰斗定位芯片+BQ25895(充电管理)+C3Hx(

某城user_dun,js逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解某城ly headers中参数userdun的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有

2020年SEO行业发展变化和趋势分析!

一、搜索引擎算法发展轨迹 第一阶段:人工目录(1997年-2001年“雅虎早期搜索模式”); 第二阶段:文本分析(2001年-2004年“以关键词和背景颜色一样,堆积大量关键词,就会有非常好的排名; 第三阶段:链接分析(2004年-2009年“以反向链接为核心算法的阶段”),这时行业内有句话是内容为王,外链为皇; 第四阶段:智能分析(2009年-现在“以满足用户人性化需求的用户浏览行为分析

2020年数据术语的故事

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 2020年整个技术圈子要说话题最多的,应该是大数据方向。新感念层出不穷,数据湖概念就是其中之一。这篇文章是关于数据仓库、数据湖、数据集市、数据中台等一些列的概念和发展进程。希望给大家带来一个全面的感知。 本文作者:Murkey学习之旅、开心自由天使 本文整理:大数据技术与架构,未经允许不得转载。 如今,随着诸如互联网以及物联网等