想通过ida逆向破除一个程序的时间限制,改限制比较简单,限定了一个固定的失效时间,比如2015年1月1日,只要改系统时间就能继续使用
通过用ida将程序反汇编成类似c的伪代码如下
反编译得到用c表示的伪代码
v35 = -1;
if ( v31 + 100 * v32 + 10000 * v30 > v34 )
v35 = 0;
return v35;
需要跳过该if判断
对应的汇编语句如下,因为对汇编不是非常熟悉,所以语句的范围稍微选得大一些
.text:000000000000236A add eax, edx
.text:000000000000236C mov rdx, [rbp+120h+arg_8]
.text:0000000000002373 add eax, [rdx]
.text:0000000000002375 mov [rbp+120h+var_18], eax
.text:000000000000237B mov [rbp+120h+var_14], 0FFFFFFFFh
.text:0000000000002385 mov eax, [rbp+120h+var_1C]
.text:000000000000238B mov edx, [rbp+120h+var_18]
.text:0000000000002391 cmp eax, edx
.text:0000000000002393 jle short loc_239F
.text:0000000000002395 mov [rbp+120h+var_14], 0
.text:000000000000239F
.text:000000000000239F loc_239F: ; CODE XREF: valid_usage+299j
.text:000000000000239F mov eax, [rbp+120h+var_14]
.text:00000000000023A5 mov rbx, [rbp+120h+var_38]
.text:00000000000023AC lea rsp, [rbp+120h]
.text:00000000000023B3 pop rbp
.text:00000000000023B4 retn
.text:00000000000023B4 valid_usage endp
因为不知道怎么修改汇编删除判断语句,所以我想了一个改动最小的方法,等效的c表示的伪代码为
v35 = -1;
if ( v31 + 100 * v32 + 10000 * v30 > v34 )
v35 = 1;
return v35;
对应的汇编语句为
.text:0000000000002395 mov [rbp+120h+var_14], 1
或者-1,也可以
现在的问题是不知道怎么修改对应的机器码才能实现我想要的改动。
对应的2395地址下的机器码为
C7 85 0C 01 00 00 00 00 00 00 8B 85 0C 01 00 00
我需要怎么改才能实现我想要的功能?
更详细一点的描述请见附件。请各位高手指点迷津,多谢!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法