CN107885505B - 一种代码定位方法 - Google Patents

一种代码定位方法 Download PDF

Info

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
Application number
CN201710914571.XA
Other languages
English (en)
Other versions
CN107885505A (zh
Inventor
韦福
谭华宇
黄定真
蒙武辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Fushan Electronic Technology Co ltd
Original Assignee
Zhejiang Fushan Electronic Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Fushan Electronic Technology Co ltd filed Critical Zhejiang Fushan Electronic Technology Co ltd
Priority to CN201710914571.XA priority Critical patent/CN107885505B/zh
Publication of CN107885505A publication Critical patent/CN107885505A/zh
Application granted granted Critical
Publication of CN107885505B publication Critical patent/CN107885505B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse 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所述的代码定位方法,其特征在于,将所述代码定位方法开发成软件,所述软件可自动查找字符串常量、定位函数位置并进行自动修改代码。
CN201710914571.XA 2017-09-30 2017-09-30 一种代码定位方法 Active CN107885505B (zh)

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)

* Cited by examiner, † Cited by third party
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 西安电子科技大学 基于自动化识别驱动参数辅助内核漏洞挖掘的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
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