|
本帖最后由 书香 于 2024-2-10 09:49 编辑
在001课中【S01E01】Shark恒 零基础逆向教程之图文版【逆向原理】中,shark恒站长为我们演示了一个强行跳转验证的功能
为了方便大家理解,我写的程序在shark恒老师的课件上做了修改
源码+编译后的程序:
001课件.rar
(297.43 KB, 下载次数: 3)
①:我改成了卡密登录(大家可能更熟悉这种卡密界面)
②:我将弹出验证成功改为了载入一个新窗口(更加符合实际情况方便大家理解),但是我也保留了弹出验证成功的代码(尽可能贴近shark恒老师的课件,否则od里显示会有一点差异影响学习效率)
③:我设置的是卡密输入123就载入功能窗口
接下来大家打开下载我的课件,使用shark恒老师的教学来操作我的这个课件程序,成功后我们来进行讲解,成功不了多测试几次
接下来我们来讲解源码组成与shark恒老师在本节中涉及到的的知识点
打开你的易语言加载我上传的测试程序的源码
先看易语言代码截图
shark恒老师课程内容简述
shark恒老师这篇文章讲的意思就是找到下方这句代码,然后屏蔽掉,nop的意思就是我直接把这句代码删了(表达的意思不完全对,但是效果大概就是这样)
那我这句代码没有了会怎么样?那我们就只会执行下面的两句了
为什么不是3句?加上信息框 (“验证失败”, 0, , )这一句
因为他们不是一个领域,(我下面有讲解领域问题),不理解判断的说明你在上一级的链接中并没有按照要求先看易语言基础课程,如果看了就再复习一次014:【认识选择结构】 (易语言dz插件渲染效果不明显,复制到易语言里看)
接下来我们来提取并拓展shark老师这篇文章中的知识点
知识点1:ASCALL码解释
008:【ASCALL编码】 009:【UTF-8和GBK】 017:【Unicode(UTF-16)】
先阅读上方的3篇文章
编程语言在将源码编译成exe的时候,文本型数据(比如验证成功、验证失败,只要你眼睛看到的字符基本都属于文本型数据)会以指定编码(GBK、Unicode等)形式存储在硬盘,准确来说是2进制,不过考虑到本节对很多人难度已经很大了,2进制和ascall这个关系分支就先不讲了,后面补充
其实shark恒老师搜索Ascall这一步是有前提条件的,那就是shark恒老师的测试课件是基于GBK编码来编译的,例如易语言程序的底层框架设计就是基于GBK编码
在GBK编码里一个汉字占用2个字节,也就是使用2个ASCALL码来表达,比如验证成功的ASCALL码集合就是:{209,233,214,164,179,201,185,166},od搜索ascall码实际就是搜索这一段ascall码,这段代码可以通过下方代码得出:
但是对于其他语言可能就不是基于GBK编码了,比如火山是基于Unicode(UTF-16,,不是UTF-8),一个汉字要使用4个ascall码(4个字节)来表示,所以你要选择搜索Unicode,这是一个隐藏知识点
搜索ascall码实际上相当于搜索GBK编码,我这里上传了一个用火山编写的程序给大家测试使用,因为火山底层框架采用的是Unicode编码,所以搜索“登录成功”4个字需要使用搜索Unicode,我这个火山程序(MFC)只写了“登录成功”,所以大家搜索成了“登录失败”
32位被搜索程序.rar
(1.38 MB, 下载次数: 0)
至于shark老师的这张图就好理解了,我们使用搜索ascall码功能的时候实际上od已经帮我们搜索除了所有的符合要求的字符串并列举出来,这张图的功能就是在列举的所有数据中去寻找我们需要的
知识点2:寻找判断(选择结构)
shark恒老师说找跳转,哪个跳转又跳过了谁谁谁
你就对着下面这张代码图看,是不是豁然开朗?
je(跳转)在汇编语言中的意思是判断条件成立就进入下方领域1
这一步shark老师的目的就是为了找到信息框 (“验证成功”, 0, , )这句代码是否执行到底是由哪个判断来决定的,要找出这个判断
知识点3:nop
你就理解成把判断那句代码给删了,这个好像上面讲过了
知识点4:保存
这个可简单可复杂,保存的底层逻辑以后讲吧,这里面大有学问,这节课大家记得修改好要记得保存就可以了
本系列上一级链接: 【易语言od联动学习系列简介】
|
评分
-
参与人数 5 | HB +6 |
THX +2 |
收起
理由
|
叁壹伍
| + 1 |
|
|
消逝的过去
| + 2 |
|
|
爱编
| |
+ 1 |
|
美好映像
| + 2 |
+ 1 |
|
小才不才
| + 1 |
|
|
查看全部评分
|