CN103632087B - 保护进程的方法和装置 - Google Patents

保护进程的方法和装置 Download PDF

Info

Publication number
CN103632087B
CN103632087B CN201210299085.9A CN201210299085A CN103632087B CN 103632087 B CN103632087 B CN 103632087B CN 201210299085 A CN201210299085 A CN 201210299085A CN 103632087 B CN103632087 B CN 103632087B
Authority
CN
China
Prior art keywords
thread
default
code
memory address
setup code
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
CN201210299085.9A
Other languages
English (en)
Other versions
CN103632087A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201210299085.9A priority Critical patent/CN103632087B/zh
Publication of CN103632087A publication Critical patent/CN103632087A/zh
Application granted granted Critical
Publication of CN103632087B publication Critical patent/CN103632087B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种保护进程的方法和装置,属于信息安全领域。所述方法包括:启动被保护进程,获取所述被保护进程的第一初始化代码;根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。

Description

保护进程的方法和装置
技术领域
本发明涉及信息安全领域,特别涉及一种保护进程的方法和装置。
背景技术
随着信息技术的发展,信息安全越来越受到用户的重视。现有的一种侵犯用户信息安全的方法是,在用户的应用中注入远程线程,通过注入的远程线程执行恶意代码或是盗取用户的密码。
现有技术中一种阻止远程线程注入的方法是,将被保护程序与驱动程序相绑定,在被保护进行启动后,通过驱动程序,使用预设的代码Hook SSDT(System ServiceDescription Table,系统服务描述表)中的系统服务,防止被保护进程被远程线程注入。具体的,在有远程线程创建时,会调用NtOpenProcess和NtWriteProcessMemory等系统服务函数,当检测到有这些函数被调用时,拦截这些被调用的函数,使这些函数调用不成功,这样远程线程就不会被创建,从而达到被保护进程不被远程线程注入的目的。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:现有的技术方案需要被保护程序必须与驱动程序捆绑发布,增加了被保护程序的复杂性,降低了被保护程序的稳定性。
发明内容
为了降低被保护程序的复杂性,本发明实施例提供了一种保护进程的方法和装置。所述技术方案如下:
一方面,提供了一种保护进程的方法,所述方法包括:
启动被保护进程,获取所述被保护进程的第一初始化代码;
根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
所述获取所述被保护进程的第一初始化代码之后,还包括:
将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
所述将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,包括:
获取所述被保护进程的第一初始化代码的起始内存地址;
根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
所述方法还包括:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
所述根据所述第一指定的内存地址对应的指令判断所述预设线程是否是被保护进程的线程,包括:
获取所述第一指定的内存地址对应的指定指令;
根据所述指定指令获取所述预设线程的线程函数地址;
将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
另一方面,提供了一种保护进程的装置,所述装置包括:
获取模块,用于启动被保护进程,获取所述被保护进程的第一初始化代码;
初始化模块,用于根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
跳转模块,用于当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
执行模块,用于根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
所述装置还包括:
备份模块,用于在所述获取模块获取所述被保护进程的第一初始化代码之后,将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
所述备份模块包括:
第一获取单元,用于获取所述被保护进程的第一初始化代码的起始内存地址;
计算单元,用于根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
拷贝单元,用于从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
所述执行模块还用于:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
所述执行模块,包括:
第二获取单元,用于获取所述第一指定的内存地址对应的指定指令;
第三获取单元,用于根据所述指定指令获取所述预设线程的线程函数地址;
匹配单元,用于将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
本发明实施例提供的技术方案带来的有益效果是:启动被保护进程,获取所述被保护进程的第一初始化代码;根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。在被保护程序中加入预设的代码,在被保护进程启动时,用预设的代码Hook掉第一初始化代码,使预设线程按照第二初始化代码的指令跳转到第一指定的内存地址,执行指定指令,判断所述预设线程是否是被保护进程的线程,一旦发现该线程不是被保护进程的线程,则终止该线程的执行,其中不需要将驱动程序与被保护程序相绑定,降低了被保护程序的复杂度,提高了被保护程序的稳定性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种保护进程的方法流程图;
图2是本发明实施例二提供的一种保护进程的方法流程图;
图3是本发明实施例三提供的一种保护进程的装置结构示意图;
图4是本发明实施例三提供的另一种保护进程的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
参见图1,本实施例中提供了一种保护进程的方法,包括:
101、启动被保护进程,获取所述被保护进程的第一初始化代码;
102、根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
103、当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
104、根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
进一步地,所述获取所述被保护进程的第一初始化代码之后,还包括:
将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
其中,所述将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,包括:
获取所述被保护进程的第一初始化代码的起始内存地址;
根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
进一步地,所述方法还包括:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
本实施例中,所述根据所述第一指定的内存地址对应的指令判断所述预设线程是否是被保护进程的线程,包括:
获取所述第一指定的内存地址对应的指定指令;
根据所述指定指令获取所述预设线程的线程函数地址;
将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
本实施例的有益效果是:启动被保护进程,获取所述被保护进程的第一初始化代码;根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。在被保护程序中加入预设的代码,在被保护进程启动时,用预设的代码Hook掉第一初始化代码,使预设线程按照第二初始化代码的指令跳转到第一指定的内存地址,执行指定指令,判断所述预设线程是否是被保护进程的线程,一旦发现该线程不是被保护进程的线程,则终止该线程的执行,其中不需要将驱动程序与被保护程序相绑定,降低了被保护程序的复杂度,提高了被保护程序的稳定性。
实施例二
本发明实施例提供了一种保护进程的方法,本实施例中,不需要将驱动程序和被保护程序进行绑定,即允许远程线程在被保护进程中创建,但是不允许远程线程的执行。由于每个线程执行时,操作系统都需要执行一些线程的初始化代码(BaseThreadInitThunk),然后再去执行启动的线程,所以本实施例中,在被保护进程中编写预设的代码,该预设的代码用于指示执行的线程跳转到第一指定的内存地址执行指定的指令。当被保护程序启动时,用预设的代码Hook掉被保护程序中的原有的初始化代码,使线程按预设的代码指令执行,从而达到阻止远程线程执行的目的。参见图2,具体的,方法流程包括:
201、启动被保护进程,获取所述被保护进程的第一初始化代码,根据预设的代码Hook所述第一初始化代码中的预设指令,得到预设的初始化代码。
本实施例中,在被保护进程中编写了预设的代码,当被保护进程启动时,查找该被保护进程的第一初始化代码,即该被保护程序的原始代码,一方面,将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。另一方面,将预设的代码用行内补丁(Inline Patch)的方式Hook掉第一初始化代码中的预设指令。
其中,将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,包括:获取所述被保护进程的第一初始化代码的起始内存地址;根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
本实施例中,用预设的代码Hook掉第一初始代码中的预设指令,其中预设指令是根据预设代码所占的内存大小计算得来的,即如果预设的代码所占的内存大小需要占用三条第一初始化代码中的指令,则预设指令就是从第一初始化代码的起始地址开始往下顺序执行的三条指令,如表1所示的初始化代码。
表1
启动被保护程序后,查找到第一初始化代码的起始内存地址为760B1102kerne132.BaseThreadInitThunk,预设的代码为Jmp 00328A00,则计算出该预设的代码需要占用第一初始化代码的三条指令,则从760B1102 kerne132.BaseThreadInitThunk地址开始,拷贝表1中的三条指令,MOV EDI EDI;PUSH EBP;MOV EBP,ESP;将这三条指令拷贝到内存地址0032BA20处,在这里内存地址0032BA20就是第二指定的内存地址,如表2所示的拷贝到第二指定内存地址的初始化代码。
表2
进一步地,在0032BA25处追加一条Jmp指令,用于调转回去,即跳转到拷贝的第一初始化代码中的预设指令对应的下一个内存地址处,如表2所示跳转到表1中的760B1107内存地址处执行。当然根据预设的代码所占内存的大小,预设指令可以是2条,4条或是5条,对此本实施例不做具体限定。
另一方面,将表1中初始代码中的预设指令部分Hook掉,即用预设的代码取代预设的指令,如表3所示。
表3
值得说明的是,根据预设的代码Hook所述第一初始化代码中的预设指令,得到预设的初始化代码的步骤是在被保护程序启动时执行的,每次被保护程序启动的时候,都需要执行一次。
202、当预设线程被启动时,执行预设的初始化代码,跳转到第一指定的内存地址。
本步骤中,预设线程可能是远程线程,也可能是被保护进程自身的线程,对此本实施例不做具体限定。由于原有初始化代码已被预先编写的预设的代码Hook掉,所以当预设线程被启动时,直接执行预设的初始化代码,根据预设的初始代码中的跳转指令,跳转到第一指定的内存地址执行指定的指令。其中指定指令是预先编写到被保护程序中的,用于执行判断所述预设线程的线程函数是否是被保护进程的线程函数表中的函数的命令。如表3中所示,第一指定的内存地址为00328A00,则执行预设的初始化代码后跳转到00328A00执行命令。
203、根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果是,则执行步骤204,否则执行步骤205。
本实施例中,在创建被保护进程时,同时创建被保护进程的函数表,用于存储该被保护进程所用到的所有线程函数信息,其中包括线程函数的地址信息。
具体的,根据所述第一指定的内存地址对应的指令判断所述预设线程是否是被保护进程的线程,包括:获取所述第一指定的内存地址对应的指定指令;根据所述指定指令获取所述预设线程的线程函数地址;将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
204、跳转到第二指定的内存地址,执行拷贝的第一初始化代码中的预设指令。
如果预设线程的线程函数地址能够与函数表中的线程函数地址匹配,则说明该预设线程是被保护进程的线程,允许该线程继续执行。具体的,跳转到第二指定的内存地址,如表2所示的内存地址0032BA20,执行备份的预设指令,当执行到JMP kerne132.760B1107时,跳转回第一初始化代码的内存地址760B1107处继续执行。后续的执行与现有技术类似,对此本实施例不做具体限定。
205、终止执行所述预设线程。
如果预设线程的线程函数地址不能够与函数表中的线程函数地址匹配,则说明该预设线程是远程线程,则终止预设线程的执行,从而阻止了病毒、木马等恶意程序对被保护程序的破坏。
本实施例的有益效果是:启动被保护进程,获取所述被保护进程的第一初始化代码;根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。在被保护程序中加入预设的代码,在被保护进程启动时,用预设的代码Hook掉第一初始化代码,使预设线程按照第二初始化代码的指令跳转到第一指定的内存地址,执行指定指令,判断所述预设线程是否是被保护进程的线程,一旦发现该线程不是被保护进程的线程,则终止该线程的执行,其中不需要将驱动程序与被保护程序相绑定,降低了被保护程序的复杂度,提高了被保护程序的稳定性。
实施例三
参见图3,本发明实施例提供了一种保护进程的装置,该装置包括:获取模块301、初始化模块302、跳转模块303和执行模块304。
获取模块301,用于启动被保护进程,获取所述被保护进程的第一初始化代码;
初始化模块302,用于根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
跳转模块303,用于当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
执行模块304,用于根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
参见图4,进一步地,所述装置还包括:
备份模块305,用于在所述获取模块获取所述被保护进程的第一初始化代码之后,将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
其中,所述备份模块305包括:
第一获取单元,用于获取所述被保护进程的第一初始化代码的起始内存地址;
计算单元,用于根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
拷贝单元,用于从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
进一步地,所述执行模块304还用于:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
本实施例中,所述执行模块304,包括:
第二获取单元,用于获取所述第一指定的内存地址对应的指定指令;
第三获取单元,用于根据所述指定指令获取所述预设线程的线程函数地址;
匹配单元,用于将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
本实施例的有益效果是:启动被保护进程,获取所述被保护进程的第一初始化代码;根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。在被保护程序中加入预设的代码,在被保护进程启动时,用预设的代码Hook掉第一初始化代码,使预设线程按照第二初始化代码的指令跳转到第一指定的内存地址,执行指定指令,判断所述预设线程是否是被保护进程的线程,一旦发现该线程不是被保护进程的线程,则终止该线程的执行,其中不需要将驱动程序与被保护程序相绑定,降低了被保护程序的复杂度,提高了被保护程序的稳定性。
需要说明的是:上述实施例提供的保护进程的装置中,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
另外,上述实施例提供的保护进程的装置与保护进程的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种保护进程的方法,其特征在于,所述方法包括:
启动被保护进程,获取所述被保护进程的第一初始化代码;
根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
2.根据权利要求1所述的方法,其特征在于,所述获取所述被保护进程的第一初始化代码之后,还包括:
将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
3.根据权利要求2所述的方法,其特征在于,所述将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,包括:
获取所述被保护进程的第一初始化代码的起始内存地址;
根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
5.根据权利要求1所述的方法,其特征在于,所述根据所述第一指定的内存地址对应的指令判断所述预设线程是否是被保护进程的线程,包括:
获取所述第一指定的内存地址对应的指定指令;
根据所述指定指令获取所述预设线程的线程函数地址;
将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
6.一种保护进程的装置,其特征在于,所述装置包括:
获取模块,用于启动被保护进程,获取所述被保护进程的第一初始化代码;
初始化模块,用于根据预设的代码Hook所述第一初始化代码中的预设指令,得到第二初始化代码,所述预设的代码用于指示执行的线程跳转到第一指定的内存地址;
跳转模块,用于当预设线程被启动时,执行所述第二初始化代码,并根据所述第二初始化代码跳转到第一指定的内存地址;
执行模块,用于根据所述第一指定的内存地址对应的指定指令判断所述预设线程是否是被保护进程的线程,如果否,则终止执行所述预设线程。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
备份模块,用于在所述获取模块获取所述被保护进程的第一初始化代码之后,将所述第一初始化代码中的预设指令拷贝到第二指令的内存地址,并将跳转指令添加到所述拷贝后的预设指令之后,所述跳转指令用于指示执行的线程跳转到所述第一初始化代码中的所述预设指令对应的下一个内存地址。
8.根据权利要求7所述的装置,其特征在于,所述备份模块包括:
第一获取单元,用于获取所述被保护进程的第一初始化代码的起始内存地址;
计算单元,用于根据预设的代码所占内存的大小,计算出需要拷贝的所述第一初始化代码中的指令条数,得到所述第一初始化代码中需要拷贝的预设指令;
拷贝单元,用于从所述起始内存地址对应的指令开始拷贝所述预设指令,并将拷贝得到的所述预设指令从第二指定的内存地址开始顺序存放。
9.根据权利要求7所述的装置,其特征在于,所述执行模块还用于:
如果所述预设线程是所述被保护进程的线程,则跳转到第二指定的内存地址,执行所述拷贝后的第一初始化代码中的预设指令。
10.根据权利要求6所述的装置,其特征在于,所述执行模块,包括:
第二获取单元,用于获取所述第一指定的内存地址对应的指定指令;
第三获取单元,用于根据所述指定指令获取所述预设线程的线程函数地址;
匹配单元,用于将所述预设线程的线程函数地址与所述被保护进程的线程函数表中的地址进行比较,如果所述预设线程的线程函数地址能够与所述被保护进程的线程函数表中的地址匹配,则确认所述预设线程是所述被保护进程中的线程,否则,确认所述预设线程不是所述被保护进程中的线程。
CN201210299085.9A 2012-08-21 2012-08-21 保护进程的方法和装置 Active CN103632087B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210299085.9A CN103632087B (zh) 2012-08-21 2012-08-21 保护进程的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210299085.9A CN103632087B (zh) 2012-08-21 2012-08-21 保护进程的方法和装置

Publications (2)

Publication Number Publication Date
CN103632087A CN103632087A (zh) 2014-03-12
CN103632087B true CN103632087B (zh) 2017-10-13

Family

ID=50213125

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210299085.9A Active CN103632087B (zh) 2012-08-21 2012-08-21 保护进程的方法和装置

Country Status (1)

Country Link
CN (1) CN103632087B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107180189A (zh) * 2016-03-11 2017-09-19 无锡天脉聚源传媒科技有限公司 一种隐藏程序进程的方法及装置

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077523B (zh) * 2014-06-25 2018-10-16 珠海市君天电子科技有限公司 对软件进行处理的方法和装置
CN106815523B (zh) * 2015-11-27 2019-10-15 珠海豹趣科技有限公司 一种恶意软件防御方法及装置
CN107728962B (zh) * 2017-09-14 2020-05-22 北京鼎盾信息科技有限公司 一种基于共享打印机的软件部署方法及设备
CN109508536B (zh) * 2017-09-15 2020-12-15 华为技术有限公司 一种篡改程序流攻击的检测方法和装置
CN111913742B (zh) * 2018-07-03 2022-11-11 武汉斗鱼网络科技有限公司 一种程序处理方法及相关设备
CN110673899B (zh) * 2018-07-03 2022-06-21 武汉斗鱼网络科技有限公司 一种程序处理方法及相关设备
CN109446799B (zh) * 2018-11-14 2021-06-11 深圳市腾讯网络信息技术有限公司 内存数据保护方法、安全组件和计算机设备及存储介质
CN112395594B (zh) * 2019-08-15 2023-12-12 奇安信安全技术(珠海)有限公司 指令执行序列的处理方法、装置及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1624617A (zh) * 2003-12-03 2005-06-08 株式会社因卡网络 阻断对游戏进程非法访问以及操作游戏进程的方法
CN101206692A (zh) * 2006-12-20 2008-06-25 联想(北京)有限公司 检测进程的方法及设备
CN101414340A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种防止远程线程启动的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1624617A (zh) * 2003-12-03 2005-06-08 株式会社因卡网络 阻断对游戏进程非法访问以及操作游戏进程的方法
CN101206692A (zh) * 2006-12-20 2008-06-25 联想(北京)有限公司 检测进程的方法及设备
CN101414340A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种防止远程线程启动的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HOOK API时代码注入方法和函数重定向技术研究;舒敬荣;《计算机应用与软件》;20090531;第26卷(第5期);第107-110页 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107180189A (zh) * 2016-03-11 2017-09-19 无锡天脉聚源传媒科技有限公司 一种隐藏程序进程的方法及装置
CN107180189B (zh) * 2016-03-11 2020-06-09 无锡天脉聚源传媒科技有限公司 一种隐藏程序进程的方法及装置

Also Published As

Publication number Publication date
CN103632087A (zh) 2014-03-12

Similar Documents

Publication Publication Date Title
CN103632087B (zh) 保护进程的方法和装置
KR101054318B1 (ko) 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체
US20100154062A1 (en) Virus Scanning Executed Within a Storage Device to Reduce Demand on Host Resources
CN104951405B (zh) 存储系统以及对存储系统执行和验证写保护的方法
US9262631B2 (en) Embedded device and control method thereof
WO2014000613A1 (zh) 系统修复方法、装置及存储介质
TWI554907B (zh) Trojan horse detection method and device
US20090307452A1 (en) Storage device having an anti-malware protection
WO2005019974A3 (en) Secure protection method for access to protected resources in a processor
CN102831339B (zh) 一种针对网页的恶意攻击进行防护的方法、装置和浏览器
JP2014518582A5 (zh)
WO2016101519A1 (zh) 一种实现操作系统重启的方法和装置
CN104484592A (zh) 移动设备工厂模式的启动方法及系统
CN109117201B (zh) 一种程序退出的方法及相关设备
CN104951701A (zh) 一种基于usb控制器的终端设备操作系统引导的方法
KR102415005B1 (ko) 실행코드를 검증하는 하드웨어 보안모듈 및 그것을 갖는 디바이스 및 그것의 동작 방법
JP2018509723A (ja) 動的なセキュリティーモジュール端末装置及びその駆動方法
CN105808978A (zh) 一种基于单片机固件的硬件防盗版方法及系统
CN105787352A (zh) 一种可执行模块的提供、加载方法及终端
KR100494499B1 (ko) 실행중인 파일에 대한 실시간 데이터 수정 방법 및 이를이용한 바이러스 치료방법
WO2017096917A1 (zh) 一种热补丁注入方法及装置
CN102375946A (zh) 一种检测网页木马的方法和装置
CN104516752B (zh) 一种信息处理方法及电子设备
JP5194053B2 (ja) 認証プログラム、プログラムセット、認証方法及び認証装置並びにソフトウェア有効期限変更装置
CN103679035A (zh) 安全性检测方法与装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant