前言
之前也有说过超过9成的外挂是由易语言制作的,网络验证程序也有6~7成是易语言制作的,所以这几期专门针对易语言来做系列教程。在讲NOP填充跳过本地验证的时候,讲到过易语言的按钮特征码 ff 55 fc 5f 5e ,本篇也是对各事件的特征码做一个扩展。
在学习逆向的过程中,不能心急。如果只是复刻我的操作,那换一个程序你就不会了,一定也要稍微的了解里面的原理。也欢迎大家相互交流,互相提升技术水平。
正文
组件1:【 时钟 】
在易语言中编写一个 时钟demo,这里有几个关键词需要了解
时钟:易语言用作计时的组件
时钟周期:时钟定时的长短。比如,以1秒为一周期,时钟周期=1000;以2秒为一周期,时钟周期=2000
周期事件:在每一个时钟周期需要执行的事件,也就是需要执行的子程序
来设计一个软件打开的时间,以秒为单位,那么要设置的时钟周期就是1000
那通过什么来进行累加呢,总有一个变量一个数值来统计
所以添加一个该窗口下的变量“打开时间”,定义为整数型,然后每过1000毫秒(1秒)+1
运行程序之后,发现程序已经能自动的变换打开的时间了
编译成 .exe 程序,利用 OD 进行反编译,但我们并不知道【上图】这段能改变数值的代码在哪里。这个时候我们就需要用到表达式,按下 Ctrl + G
时钟事件表达式:SetTimer( 注意大小写,一个字母错了都搜索不到 )
定位到这一段,一直到 retn 0x10 这就是时钟事件
不管你设置是多少毫秒,都是要经过这段代码的
双击 mov edi ,edi 将内容改成 retn 10,需要注意的是不是随便 retn,你要看段尾是 retn 几,代码就这么多,一眼就可以看到 retn 位置了
下断点运行,发现时钟已经被我们干掉了
总结
SetTimer是什么?
SetTimer是一种API函数,位于user32.dll中。你想每隔一段时间执行一件事的的时候,你可以使用它。 使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后Windows以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。不需要指定定时器时,可以调用对应的KillTimer函数销毁指定的时钟。
这里使用的思路是废掉 SetTimer,除了函数第一行使用 retn 0x10之外,还可以改跳转,或是直接NOP掉函数调用,甚至可以用 KillTimer 代替。