reversing.kr(上)

Easy Crack

找到关键验证函数如下

显然,这是个明文比较,一眼就能看到结果。

Easy Keygen

题目描述:Find the Name when the Serial is 5B134977135E7D13

主函数中可以找到序列号的生成算法,逻辑很清晰,就是依次异或3个密钥

随手写个脚本就可以解辣

s = '5B134977135E7D13'
s = s.decode('hex')
s = [ord(c) for c in s]

for i in range(len(s)):
    if i % 3 == 0:
        s[i] ^= 16
    if (i - 1) % 3 == 0:
        s[i] ^= 32
    if (i - 2) % 3 == 0:
        s[i] ^= 48

print ''.join([chr(c) for c in s])

Easy Unpack

这个题是找程序的入口点,试了很多种简单粗暴的方式都不得行,于是单步跟踪到入口点。。。

Music Player

本题要求破解一个只有1分钟比播放限制的播放器,成功播放到一分钟以上时序列号就会被设置到标题栏。

首先测试一下程序,播放超过一分钟时出现弹窗

丢进IDA中没法看,发现是VB程序,VB程序的静态分析比较麻烦,所以用调试器来打开。VB函数中的弹窗函数是rtcMsgBox,下断后运行并走出API,就可以定位到一个关键的函数当中。

在函数开头下断,发现该函数会一直被调用,每次调用播放一段时间音乐,猜测是回调函数,在call rtcMsgBox这条指令之前不远处可以看到一个关键跳,直接暴破,将jl指令改为jmp,然后运行程序,结果在运行后抛出异常

忽略这个异常继续运行,虽然音乐还在播放,确实超过1分钟了,不过又弹出错误提示

利用栈回溯到触发这个异常的函数中,依然在不远处发现了关键跳指令,将jge改为jmp再次运行程序。

修改限制成功

Replace

本题还是挺妖的,要慢慢地进行动态分析并进行一定猜测才能完成。首先在调试器中找到输入点位置

这里可以看出要求输入纯数字,可以看到只要顺利执行下去就会输出正确,但这之前有几个调用和跳转。首先跟进第一个函数中,

显然存在花指令,不用在意,继续单步跟踪,可以看到下方被解释成了这样

最终ret回去后,输入的值增加了2,然后加上0x601605c7,再加上2后回到最开始这里

跳转到0x404690处,有许多没用的操作,不用管

注意 mov dword ptr ds:[40466F],C39000C6这条指令,它改变的本质上是代码段,之后对这段进行函数调用,而这段新代码如下

这里的eax正是inputValue+2+0x601605c7+2所组成的,若我们胡乱输入,这里很可能触发内存不可访问的异常,那么这个地址究竟是啥呢?这里进行了0x90的赋值操作,而0x90也表示nop指令,所以这里本质上是nop掉eax地址的2字节数据。回到最开始的地方,之前说过,只要顺序执行下去就会输出正确,而0x401071处正是2字节的跳转指令,若将其nop掉后,程序就会输出正确,也就是说,eax的地址为0x401071,这样就能得出inputValue的值了。

ImagePrc

很容易找到关键点

这里逻辑很清晰,就是我们画上去的东西和获取的资源文件是相同的,使用ResourceHack转存资源文件,计算得大小为90000,我们画的东西是RGB像素点,每个像素点占3个字节,所以实质上有30000个像素点,由于是黑白的,不同颜色的像素点首字节是不同的。现在还不知道长和宽,在IDA中发现以下代码

说明是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值