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

很容易找到关键点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值