首页 > 其他分享 >硬编码寻址3

硬编码寻址3

时间:2022-09-24 13:56:40浏览次数:45  
标签:编码 10 eax 寻址 ebp 字符串 edx 指针

硬编码寻址3

先大概熟悉下面进行逆向的软件功能

image-20220922143315486

输入序列号点击验证后发现弹出提示序列号错误

image-20220922143506177

功能很简单用户输入序列号程序读取用户输入进行比对,根据结果弹出窗口提示。进行OD分析

image-20220922144051948

对GetDlgItemTestA函数段首设置断点,开始执行输入
image-20220922152010352
执行断下来了堆栈Buffer数据窗口跟随一步一步跟下来执行获取到了输入的值,这里就不一步一步跟了执行下去到程序领空
image-20220922152417797
跟到这里
image-20220922153812999

ebp=020FA14
未知字符串指针=00401222
存放输入序列号地址=000DE5B8

先将ebp+10(020FA04)这个指针地址的内容置零,后面一大串的mov指令其实作用是将先将一个存放未知字符串的指针赋给eax然后去读取未知字符串给它放到020F9E4,ebp-24(020F9F0)这个地址放到eax中。又对ebp内的指针进行一系列的操作-4+10-C,通过memset函数将eax指针中的八字节数据置零。又将[ebp-34]指针中四字节数据置零,将ebp-30(存放未知字符串的指针)指针地址放入eax中image-20220922161146767

到这里框出来的部分指令就已经分析完毕

程序通过call调用strlen函数通过百度知道作用是计算字符串长度,得到的结果放在eax中,对esp+10,将eax(返回的未知字符串长度-1)给edx,再将edx通过cmp比较[ebx-10],[ebx-10]减去edx会使进位标志位置1从而触发jb跳转这样jmp跳转根本就不会被执行,image-20220922161703298

对[ebp-c]这个指针的内容赋值给eax,再对[ebp-10]这个指针取四字节赋值给edx,这么看其实就是从ebx-10这个指针取数据很别放到eax,edx中。但我也很好奇为啥要对这个地址取它的内容呢于是我在数据窗口跟随发现这个地址ebp-c放着用户输入的序列号的指针,也就是说eax现在就是用户输入的指针,edx为0image-20220922170538495

然后取输入的序列号的第一个字节赋值给edx其余位用符号位填充,再将edx-14也就是输入字符串的第一位的16进制减14给到eax,将未知字符串的指针地址赋值给edx,将[ebp-10]赋值给ecx也就是将ecx置空,将未知字符串的第一个字节取出赋值给edx。然后将eax和edx进行比较,也就是修改过后的输入的第一位和位置字符串的第一位比较。不相同则跳转对[ebp-10]累加1,相同则将未知字符串的指针给到eax,再将[ebp-10]赋值给edx,后将[edx+eax]一个byte赋值为73,对[ebp-34]和[ebp-10]分别累加1。最后执行跳转回到上面接着执行。image-20220924130001225

到这里我才发现这里进入了一个循环,因为实现已经对整个指令进行了充分的理解。[ebp-10]这个指针中存放着的数据对于整个循环而言其实至关重要,它告诉程序什么时候跳出循环image-20220924130450940

当[ebp-10]等于未知字符串长度时其实也就跳出了循环,而[ebp-34]这个指针中的数据则是输入的序列号与正确的序列号正确了多少个字符

image-20220924121056727

整个循环的作用就是分别取对应字符比对正确了则修改未知字符串的那一位字符为74

image-20220924132837974

这一段则是传递存储信息

下图中框出的一段指令,对[ebp-10]和[ebp-34]做对比相同则不跳转弹出正确不相同则弹出错误。

上面我们说了不知大家是否记得[ebp-10]和[ebp-34]这两个分别代表未知字符串的长度和比对正确的次数

image-20220924132959277

那是否我们就能判断这就是要找的字符串,但这样肯定是不对的,还记得在比对的过程中对我们输入的字符串进行了修改吗,那我们在原来未知字符串各位上加回来就能搞定了。

image-20220924134558126

修改后得到ascll码输入验证

image-20220924134727667

标签:编码,10,eax,寻址,ebp,字符串,edx,指针
From: https://www.cnblogs.com/tres/p/16725536.html

相关文章

  • 任何人都可以学习的基本终端命令(不涉及编码!)
    任何人都可以学习的基本终端命令(不涉及编码!)对于我的第5周像开发者一样说话系列,我会为你介绍任何级别使用的基本终端命令!BasicTerminalCommandsAnyoneCanLearn......
  • Kodezi——最聪明的编码方式
    Kodezi——最聪明的编码方式软件开发已成为劳动力市场上最受重视的技能之一。每家公司都需要技术人才,从2019年到2029年,该类别中的职位估计将增长22%,远高于所有其他......
  • 【数字通信】高速信号编码之XXB/XXB
    对于NRZ数据编码方式,有4B/5B,8B/10B,64B/66B,64/67B,128B/130B,128B/132B编码等等,不同的编码方式针对不同的信号协议,导致的效率也是不同的。什么是效率?在数据包传送的......
  • 【数字通信】编码
    在数字电路中,组成一连串信息的基元就是0和1,无论是在CPU、DSP、MCU甚至是个数字计数器中,数字电路在其中能够处理的信息也只有0和1,而对于任何外界的信息,计算机都能通过两......
  • js校验手机号、邮政编码、email、url的数据合法性
    //校验手机号/固话functioncheckPhone(mobile){mobile=mobile+'';vartel=/^0\d{2,3}-?\d{7,8}$/;varphone=/^(((13[0-9]{1})|(15[0-9]{1})|(......
  • 字符编码
    字符编码一、字符编码字符编码(英语:Characterencoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机......
  • JAVA字符串转Unicode编码
    importjava.util.ArrayList;publicclassHello{publicstaticvoidmain(String[]args){Strings="我爱JAVA";System.out.println(s2uni......
  • java如何获取一个文本文件的编码(格式)信息呢?
    转自:http://www.java265.com/JavaJingYan/202110/16350332691561.html 文本文件是我们在windows平台下常用的一种文件格式,这种格式会随着操作系统的语言不同,而出现其......
  • 【前端】HTML编码效提升:快速生成HTML标签
    目录1.生成多级标签2.生成同级标签3.生成注释4.生成多个相同标签5.生成带class标签6生成带id标签.7.生成带内容标签18.生成带内容标签29.生成带属性标签GIF演示:快速生成HT......
  • url参数+,&,=,/等转义编码【转】
    问题描述在使用postman发送请求时,url出现了有+,空格,/,?,%,#,&,=等特殊符号,可能在转义之后导致服务器端无法获得正确的参数值。解决办法将这些字符转化成服务器可以识别的字符......