那我们这期教程接着讲啊,我们来这样啊,我们来喊个话,一我们喊个话,一喊一段喊起来。然后呢,我们可以看到我们的包场是二零对吧,然后我们的包内容是23230对吧。
好,那我们,在二零的这个地方,我们给他双击一下对吧。然后呢,我们慢慢运行,我们F8F8F8F8F八,到这里,到这里,我们可以看到我们的这个地方呢,已经变成2C了对吧,虽然是负的2C。我完全可以这样。那他是不是就变成ESP加2C了对吧,也就是说波长变成ESPIC了。
他为什么变成加IC了呢?那你看这里有三个push对吧,三个push再加上这个sub e s p14对吧,经过这么一系列的东西,它就变成RC了。那我们再想一想啊,我们进入这个call之后,我们经过push d之后,我们又变成什么了呢?啊,我们要知道就是说我们进入call之后,它还有一个push的返回值,对不对?我们还需要把返回值给push进去。那又是一个了。
并且呢,我们push push d呢它还有八个啊,还有八个还有八个,那就是九个,那就变成多少了。这里这两个是不是了对吧,这个呢我们来看一下啊,也看不出来是啥,那我们就不管了。他是个外屏障,这样已经给它平掉了。
所以说我们还要加九对吧。嗯我们直接运行进来不就知道了吗,对吧?哎我F8了是吧?我们重新来啊。我们现在看到的是156对吧,包场是156到这里。我F4到这里呢,它就变156到S了对吧。然后我们F7F7F7F8,再到这里铺设AD之后,我们这个时候再看它到多少了,到五零了,对不对?也就是说从那从干净剩的到我们的啊,进入我们改写后的这个hook之后,里面他居然对战提升了这么多对吧,对战提升了这么多。
所以呢大家在写这个里面的东西的时候一定要注意啊,啊刚刚那个cos这个啊,我还我说那是啥呢,刚刚那个call大家还记得吧,那个call就是我们的调试输出的啊,那我们这个咳咳咳这个咳咳这个无所谓了对吧,嗯我们进入这个call之后呢,首先一个push d对吧,然后呢我们这个时候啊加ESP加五零的地方让它等于EXEX,然后让它等于包查啊,报地址,那就是剪一个嘛,那就是4C的地方。
所以我这里就可以把包茶和包地址调试出来,调试出来之后呢,我现在包查是没问题了,但是我报地址它是一个地址呀,我们可以看到它是一个地址呀,那我们还需要干嘛?我们还需要读它地址里面的值,但是不仅仅是读他地址里面的值这么简单哦。我们需要干什么?我们需要把它一个字节一个字节的拼接起来,然后呢拼一共拼接多长呢,拼接包长,这么长的字节对吧。
之前我们已经带领大家看过了他的包装内容一共有多长呢,那是看包长的对吧?我们可以看到这里包长是17,那我们要看的是多少?到这里是14啊,十五十六十七对吧,到这里到这里吧,呃18就到这里了。到这里吧,这里是17,这里到这里已经是十一八了对吧,这前面的这么多。
所以说我们需要干什么?我们光得到这个地址不行,我们要读这个地址里面的值对吧,并且呢要把它给拼接起来,按波长的波长有多长,就把它拼接成的拼接多长的字符,按字节一个字节的给它拼接起来。那我们应该怎么办?我们需要读内存地址对吧,读内存地址读这么长的内存地址,存放在这个结构体里面对吧,存放在这个东西里面,然后呢我们给他个for循环,然后用sprint for给它拼接啊。
我们是给他创建了一个这样的数组对吧,然后给它拼接上。这样呢通过for循环,然后呢给它拼接起来,就形成了这里在调试输出,就调试出我们的这样的一个结果了。并且我们这里呢是new了一个对象,new了一个对象呢。我们需要把它这个事情干完了对吧,我们需要把它删除了。删除了之后呢,我们现在的确把我们该实现的功能实现了。
但是大家千万不要忘记了一点,就是说我们这里本来是有一行代码的。我们是把这行代码改写了去,反而让他去执行我们的call了对吧?那我这个call里面是不是也得帮他把咱们之前的代码给实现了对吧?不然的话你就不然你这个出去了之后,你少了这一行代码,那肯定程序就崩了对吧?所以你还得把它本来的代码也给顺带执行了啊。并且呢,我们还在执行之前呢,你需要把那个咱们刚进来,刚进来的时候不是铺设AD了吗?你得把它给破不出来。
不然,当然这个顺序没关系,当然你出去了之前一定要给他破,破不出来对吧?不然你外面用的还是你这里面的东西呢,是不是?所以说你进来的时候,你把它存起来,然后你就随便用了。用完之后呢,你就把它铺设出来,再把它拿出来还原起来对吧?然后呢,该实现的功能给它实现了,那又回到正常的状态,开开心心快快乐乐的继续工作对吧?那这一块呢也就讲完了。
这个和其实和之前我们讲过的,应该有两种还是三种方式的嗯,hook其实是差不多的啊,原理啊都是一样的,只不过实现方式呢是因为他那个用到了库文件,或者是之前已经帮你封装好了,不需要你去还原了,还原了对吧?我们现在讲的这种方式呢也是最麻烦的一种啊,但是呢也是更锻炼大家对这个汇编代码,对堆栈熟悉程度的一种方式啊,大家呢把这个也给掌握了,那以后你户口算是真真正正的啊,彻底了解了你不仅仅是说会用了,你也了解了他具体实现的啊,具体是怎么实现的对吧?
那我们这期呢,也是把这个代码给大家讲解完了,功能也实现了,从下期教程开始呢,我们就要开始真正的去分析他分包的内容了啊,本期教程就到这里。