CN107885505B - 一种代码定位方法 - Google Patents
一种代码定位方法 Download PDFInfo
- Publication number
- CN107885505B CN107885505B CN201710914571.XA CN201710914571A CN107885505B CN 107885505 B CN107885505 B CN 107885505B CN 201710914571 A CN201710914571 A CN 201710914571A CN 107885505 B CN107885505 B CN 107885505B
- Authority
- CN
- China
- Prior art keywords
- code
- assembly
- feature
- codes
- positions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
Abstract
本发明涉及一种代码定位方法,属于软件开发领域。传统汇编代码位置的查找是通过特征码去查找的,但是特征码容易变化,只要软件更新,就有可能变化,这样就得重新对软件进行反汇编分析,进行位置定位,工作量大。本发明公开了一种代码定位方法,该代码定位方法通过字符串常量或字符串常量和特征码相结合去查找定位代码的位置,工作效率高,查找定位代码快速准确。将代码定位方法开发成软件,软件即可进行自动修改代码,使用方便。
Description
技术领域
本发明涉及一种代码定位方法,属于软件开发领域。
背景技术
随着软件技术的发展,各种各样的软件开发技术层出不穷,其中有一种软件技术,就是在不知道源代码的情况下,通过反汇编,然后去修改汇编代码。这种技术也得到了大范围的使用,比如,木马病毒分析,软件打补丁,软件二次开发,软件破解等,都需要反汇编,然后找到要修改的位置,最后做代码的修改。从中我们可以看出,要修改代码,首先找到修改的位置,这样修改位置的查找就非常重要了。
传统汇编代码位置的查找是通过特征码去查找的,所谓的特征码就是汇编代码对应的二进制代码,这种二进制代码没有重复或者重复比较少,通过二进制代码可以找到汇编代码所在函数,即找到了汇编代码的位置,如申请号为201611263238.9的中国专利。但是通过特征码去查找修改代码位置,有个很麻烦的问题,就是特征码容易变化,只要软件一更新,就有可能变化,这样就得重新对软件进行反汇编分析,进行位置定位。如果软件更新频率较快,工作量比较大。
因此有必要提出一种新的方法去解决上述问题。
发明内容
本发明的目的在于克服现有技术中存在的上述不足,而提供一种代码定位方法,该代码定位方法通过字符串常量或字符串常量和特征码相结合去查找定位代码的位置,工作量少,查找定位代码快速准确。
本发明解决上述问题所采用的技术方案是:一种代码定位方法,其特征在于,包括如下步骤:对待分析软件进行反汇编分析,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量Q的汇编代码A,若所述汇编代码A为一处,则所述汇编代码A的代码位置所在函数即为所要定位的代码位置,代码定位完成;若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,查看特征码并从中找出特征码B,从汇编代码A对应的特征码中找出与特征码B位置相同的特征码M,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成;或者,若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,通过字符串常量Q所在的代码位置的顺序来确定要定位的代码位置,即,从字符串常量Q所在的代码位置的开始处数起第N个字符串常量所在的函数为要定位的代码位置;
或者,对待分析软件进行反汇编分析,查看特征码,找出特征码B,若特征码B为一处,则所述特征码B的代码位置所在函数即为所要定位的代码位置,代码定位完成;若特征码B有多处,查看汇编代码并从中找出内存地址里面储存有字符串常量Q的汇编代码A,以汇编代码A处的代码位置为基准来确定特征码,距离汇编代码A处的代码位置比较近的特征码M或者在汇编代码A的代码位置的上一行、下一行、上数行以及下数行能确定位置的特征码M,如果特征码M与特征码B相同,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成。通过字符串常量或字符串常量和特征码相结合去查找定位代码的位置工作效率高,克服了传统技术中仅使用特征码查找定位代码的位置中特征码容易变化的缺陷,工作量少,查找定位代码的位置快速准确。
更具体而言,所述函数为基准位置,修改代码以所述函数为基准,修改的代码位置在该函数中或者在该函数附近的其他函数中。
更具体而言,所述第N个字符串常量中N为自然数。
更具体而言,将所述代码定位方法开发成软件,所述软件可自动查找字符串常量、定位函数位置并进行自动修改代码。使用方便,可快速准确定位到函数的代码位置并进行自动修改,工作量少,工作效率高。
本发明与现有技术相比,具有以下优点和效果:
1.通过字符串常量或字符串常量和特征码相结合查找汇编代码所在函数,工作效率高,克服了传统技术中仅使用特征码查找定位代码的位置特征码易变化的缺陷,工作量少,查找定位代码的位置快速准确。
2.将上述代码定位方法开发成软件,所述软件可进行自动修改代码,工作效率高。
具体实施方式
下面通过实施例对本发明作进一步的详细说明,以下实施例是对本发明的解释而本发明并不局限于以下实施例。
实施例。
一种代码定位方法,包括如下步骤:对待分析软件进行反汇编分析,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量Q的汇编代码A,若所述汇编代码A为一处,则所述汇编代码A的代码位置所在函数即为所要定位的代码位置,代码定位完成;若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,查看特征码并从中找出特征码B,从汇编代码A对应的特征码中找出与特征码B位置相同的特征码M,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成;或者,若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,通过字符串常量Q所在的代码位置的顺序来确定要定位的代码位置,即,从字符串常量Q所在的代码位置的开始处数起第N个字符串常量所在的函数为要定位的代码位置;
或者,对待分析软件进行反汇编分析,查看特征码,找出特征码B,若特征码B为一处,则所述特征码B的代码位置所在函数即为所要定位的代码位置,代码定位完成;若特征码B有多处,查看汇编代码并从中找出内存地址里面储存有字符串常量Q的汇编代码A,以汇编代码A处的代码位置为基准来确定特征码,距离汇编代码A处的代码位置比较近的特征码M或者在汇编代码A的代码位置的上一行、下一行、上数行以及下数行能确定位置的特征码M,如果特征码M与特征码B相同,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成。
更具体而言,所述第N个字符串常量中N为自然数。
更具体而言,所述特征码为二进制代码。这种二进制代码没有重复或者重复比较少。为了方便技术人员辨认,以下应用例中二进制代码采用十六进制表示。
更具体而言,将所述代码定位方法开发成软件,所述软件可自动查找字符串常量、定位函数位置并进行自动修改代码。
应用例1。
如表所示,对待分析软件进行反汇编分析,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量“unknown exception”的汇编代码,即汇编代码为“MOV EAX,0x010CD7E8”,则汇编代码“MOV EAX,0x010CD7E8”的代码位置“010510F3”所在函数即为所要定位的代码位置,代码定位完成。
代码位置 | 二进制代码 | 汇编代码 | 字符串 |
010510ED | CC | INT3 | |
010510EE | CC | INT3 | |
010510EF | CC | INT3 | |
010510F0 | 8B4904 | MOV ECX,[ECX+4] | |
010510F3 | B8E8D70C01 | MOV EAX,0x010CD7E8 | ASCII“unknown exception” |
010510F8 | 85C9 | TEST ECX,ECX | |
010510FA | 0F45C1 | CMOVNE EAX,ECX | |
010510FD | C3 | RETN | |
010510FE | CC | INT3 | |
010510FF | CC | INT3 |
应用例2。
如表所示,对待分析软件进行反汇编分析,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量“unknown exception”的汇编代码,此时汇编代码有2处,代码位置分别为:“00CC10DC”和“00CC10F3”,查看二进制代码,找出二进制代码“85C9”的代码位置“00CC10F8”,在“00CC10DC”和“00CC10F3”之中“00CC10F3”的位置与二进制代码“85C9”的代码位置“00CC10F8”最近,则代码位置“00CC10F3” 所在函数即为所要定位的代码位置,代码定位完成。或者,通过字符串常量“unknown exception”的位置顺序来确定所要定位的代码位置,如下表中,第二个字符串常量“unknown exception”所在的代码位置“00CC10F3”所在的函数即为所要定位的代码位置。
代码位置 | 二进制代码 | 汇编代码 | 字符串 |
00CC10D1 | C3 | RETN | |
00CC10D2 | B9 206FD400 | MOV ECX, 00D46F20 | |
00CC10D7 | E8 E4E60500 | CALL 00D1F7C0 | |
00CC10DC | 68 E8D7D300 | PUSH 00D3D7E8 | ASCII “unknown exception” |
00CC10E1 | E8 A07A0400 | CALL 00D08B86 | |
00CC10E6 | 59 | POP ECX | |
00CC10E7 | C3 | RETN | |
00CC10E8 | CC | INT3 | |
00CC10E9 | CC | INT3 | |
00CC10EA | CC | INT3 | |
00CC10EB | CC | INT3 | |
00CC10EC | CC | INT3 | |
00CC10ED | CC | INT3 | |
00CC10EE | CC | INT3 | |
00CC10EF | CC | INT3 | |
00CC10F0 | 8B49 04 | MOV ECX,DWORD PTR DS:[ECX+4] | |
00CC10F3 | B8 E8D7D300 | MOV EAX, 00D3D7E8 | ASCII “unknown exception” |
00CC10F8 | 85C9 | TEST ECX,ECX | |
00CC10FA | 0F45C1 | CMOVNE EAX,ECX | |
00CC10FD | C3 | RETN | |
00CC10FE | CC | INT3 | |
00CC10FF | CC | INT3 |
应用例3。
如表所示,对待分析软件进行反汇编分析,查看二进制代码,找出二进制代码“85C9”,则二进制代码“85C9”对应的代码位置“010510F8”所在函数即为所要定位的代码位置,代码定位完成。
代码位置 | 二进制代码 | 汇编代码 | 字符串 |
010510ED | CC | INT3 | |
010510EE | CC | INT3 | |
010510EF | CC | INT3 | |
010510F0 | 8B4904 | MOV ECX,[ECX+4] | |
010510F3 | B8E8D70C01 | MOV EAX,0x010CD7E8 | ASCII“unknown exception” |
010510F8 | 85C9 | TEST ECX,ECX | |
010510FA | 0F45C1 | CMOVNE EAX,ECX | |
010510FD | C3 | RETN | |
010510FE | CC | INT3 | |
010510FF | CC | INT3 |
应用例4。
如表所示,对待分析软件进行反汇编分析,查看二进制代码,找出二进制代码“8BF1”,此时二进制代码“8BF1”有2处,代码位置分别为:“00CC1106”和“00CC1148”,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量“unknown exception”的代码位置“00CC10F3”,在“00CC1106”和“00CC1148”之中与“00CC10F3”位置最近的为“00CC1106”,则代码位置“00CC1106”所在函数即为所要定位的代码位置,代码定位完成。
代码位置 | 二进制代码 | 汇编代码 | 字符串 |
00CC10F0 | 8B49 04 | MOV ECX,DWORD PTR DS:[ECX+4] | |
00CC10F3 | B8 E8D7D300 | MOV EAX, 00D3D7E8 | ASCII “unknown exception” |
00CC10F8 | 85C9 | TEST ECX,ECX | |
00CC10FA | 0F45C1 | CMOVNE EAX,ECX | |
00CC10FD | C3 | RETN | |
00CC10FE | CC | INT3 | |
00CC10FF | CC | INT3 | |
00CC1100 | A1 C86ED400 | MOV EAX,DWORD PTR DS:[D46EC8] | |
00CC1105 | 56 | PUSH ESI | |
00CC1106 | 8BF1 | MOV ESI,ECX | |
00CC1108 | 85C0 | TEST EAX,EAX | |
00CC110A | 74 06 | JE SHORT 00CC1112 | |
00CC110C | 56 | PUSH ESI | |
00CC110D | FFD0 | CALL EAX | |
00CC110F | 83C4 04 | ADD ESP,4 | |
00CC1112 | 8B06 | MOV EAX,DWORD PTR DS:[ESI] | |
00CC1114 | 8BCE | MOV ECX,ESI | |
00CC1116 | FF50 08 | CALL DWORD PTR DS:[EAX+8] | |
00CC1119 | 6A 00 | PUSH 0 | |
00CC111B | 6A 00 | PUSH 0 | |
00CC111D | 6A 00 | PUSH 0 | |
00CC111F | 6A 00 | PUSH 0 | |
00CC1121 | 6A 00 | PUSH 0 | |
00CC1123 | E8 E07B0400 | CALL 00D08D08 | |
00CC113D | CC | INT3 | |
00CC113E | CC | INT3 | |
00CC113F | CC | INT3 | |
00CC1140 | 55 | PUSH EBP | |
00CC1141 | 8BEC | MOV EBP,ESP | |
00CC1143 | F645 08 01 | TEST BYTE PTR SS:[EBP+8],1 | |
00CC1147 | 56 | PUSH ESI | |
00CC1148 | 8BF1 | MOV ESI,ECX | |
00CC114A | C706 7CD9D300 | MOV DWORD PTR DS:[ESI], 00D3D97C | |
00CC1150 | 74 09 | JE SHORT 00CC115B | |
00CC1152 | 56 | PUSH ESI | |
00CC1153 | E8 FE780400 | CALL SogouExp.00D08A56 | |
00CC1158 | 83C4 04 | ADD ESP,4 | |
00CC115B | 8BC6 | MOV EAX,ESI | |
00CC115D | 5E | POP ESI | |
00CC115E | 5D | POP EBP | |
00CC115F | C2 0400 | RETN 4 | |
00CC1162 | CC | INT3 | |
00CC1163 | CC | INT3 |
其中,找到的函数位置,只是一个基准位置,修改代码以这个函数为基准,修改的代码位置在该函数中或者在该函数附近的其他函数中。
虽然本发明已以实施例公开如上,但其并非用以限定本发明的保护范围,任何熟悉该项技术的技术人员,在不脱离本发明的构思和范围内所作的更动与润饰,均应属于本发明的保护范围。
Claims (3)
1.一种代码定位方法,其特征在于,包括如下步骤:对待分析软件进行反汇编分析,查看汇编代码,找出汇编代码中内存地址里面储存有字符串常量Q的汇编代码A,若所述汇编代码A为一处,则所述汇编代码A的代码位置所在函数即为所要定位的代码位置,代码定位完成;若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,查看特征码并从中找出特征码B,从汇编代码A对应的特征码中找出与特征码B位置相同的特征码M,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成;或者,若所述汇编代码A有多处,即多处汇编代码A的内存地址里面均储存有字符串常量Q,通过字符串常量Q所在的代码位置的顺序来确定要定位的代码位置,即,从字符串常量Q所在的代码位置的开始处数起第N个字符串常量所在的函数为要定位的代码位置;
或者,对待分析软件进行反汇编分析,查看特征码,找出特征码B,若特征码B为一处,则所述特征码B的代码位置所在函数即为所要定位的代码位置,代码定位完成;若特征码B有多处,查看汇编代码并从中找出内存地址里面储存有字符串常量Q的汇编代码A,以汇编代码A处的代码位置为基准来确定特征码,距离汇编代码A处的代码位置比较近的特征码M或者在汇编代码A的代码位置的上一行、下一行、上数行以及下数行能确定位置的特征码M,如果特征码M与特征码B相同,则所述特征码M的代码位置所在函数即为所要定位的代码位置,代码定位完成。
2.根据权利要求1所述的代码定位方法,其特征在于,所述函数为基准位置,修改代码以所述函数为基准,修改的代码位置在该函数中。
3.根据权利要求1所述的代码定位方法,其特征在于,将所述代码定位方法开发成软件,所述软件可自动查找字符串常量、定位函数位置并进行自动修改代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710914571.XA CN107885505B (zh) | 2017-09-30 | 2017-09-30 | 一种代码定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710914571.XA CN107885505B (zh) | 2017-09-30 | 2017-09-30 | 一种代码定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107885505A CN107885505A (zh) | 2018-04-06 |
CN107885505B true CN107885505B (zh) | 2021-05-14 |
Family
ID=61781177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710914571.XA Active CN107885505B (zh) | 2017-09-30 | 2017-09-30 | 一种代码定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107885505B (zh) |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2363215B (en) * | 1999-11-30 | 2004-01-21 | Sgs Thomson Microelectronics | Disassembling object code |
US7246267B2 (en) * | 2001-10-01 | 2007-07-17 | Tektronix, Inc. | Logic analyzer having a disassembler employing symbol table information for identifying op-codes |
US20090319989A1 (en) * | 2008-03-13 | 2009-12-24 | Russ Osterlund | Modification of software at runtime |
CN101551773B (zh) * | 2009-03-12 | 2012-04-25 | 南京大学 | 符号错误和赋值截断的二进制漏洞检测定位装置 |
CN101714118B (zh) * | 2009-11-20 | 2011-06-22 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102111308A (zh) * | 2010-12-22 | 2011-06-29 | 成都天融信网络安全技术有限公司 | 一种多态蠕虫自动检测方法 |
CN102663286B (zh) * | 2012-03-21 | 2015-05-06 | 北京奇虎科技有限公司 | 一种病毒apk的识别方法及装置 |
US10191726B2 (en) * | 2015-04-17 | 2019-01-29 | Battelle Memorial Institute | Biosequence-based approach to analyzing binaries |
CN106682493B (zh) * | 2015-11-06 | 2019-08-27 | 珠海豹趣科技有限公司 | 一种防止进程被恶意结束的方法、装置及电子设备 |
CN107169362B (zh) * | 2017-03-29 | 2019-08-13 | 西安电子科技大学 | 基于自动化识别驱动参数辅助内核漏洞挖掘的方法 |
-
2017
- 2017-09-30 CN CN201710914571.XA patent/CN107885505B/zh active Active
Non-Patent Citations (1)
Title |
---|
APPROXIMATE DISASSEMBLY USING DYNAMIC PROGRAMMING;Abhishek Shah;《The Faculty of the Department of Computer Science》;20101230;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107885505A (zh) | 2018-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Higo et al. | Incremental code clone detection: A PDG-based approach | |
US10664383B2 (en) | Automated software program repair of similar code snippets | |
CN107016018B (zh) | 数据库索引创建方法及装置 | |
WO2015003421A1 (zh) | 一种可以快速进行字符串匹配的算法 | |
CN110968593B (zh) | 数据库sql语句优化方法、装置、设备和存储介质 | |
CN111008020B (zh) | 将逻辑表达式解析为通用查询语句的方法 | |
US10902130B2 (en) | Guiding automated testing of binary programs | |
CN107967152B (zh) | 基于最小分支路径函数胎记的软件局部抄袭证据生成方法 | |
CN103559313B (zh) | 搜索方法及装置 | |
US20140165048A1 (en) | Systems and methods for uniquely defining fortran run type descriptors for polymorphic entities | |
WO2017000859A1 (zh) | 字符序列相似子串的跨越式查找算法及其在生物序列数据库上的查找应用 | |
CN104731911A (zh) | 一种数据表与实体类的动态映射及转换方法 | |
CN102981946B (zh) | Etl冒烟测试方法 | |
CN107885505B (zh) | 一种代码定位方法 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
US8689327B2 (en) | Method for characterization of a computer program part | |
US9201982B2 (en) | Priority search trees | |
CN109683863A (zh) | 一种批量处理时防止拼写sql语句过长的方法 | |
HK1118118A1 (en) | Method for controlling a relational database system | |
CN102591941B (zh) | 一种SQLite空闲链表节点的解析方法和装置 | |
CN111090636B (zh) | 一种基于一物一码的高效追溯方法 | |
CN104461565A (zh) | 一种光模块测试参数配置方法及系统 | |
US20160259710A1 (en) | Code consistency checking method | |
CN110109907B (zh) | 一种税务数据的存储、查询方法及装置 | |
CN1510592B (zh) | 快速网络流特征检测的关键词匹配方法说明书 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |