当前位置:  编程技术>其它
本页文章导读:
    ▪234 - 问,PE COFF相关数据结构      COFF 文件头及若干段 文件头 IMAGE_FILE_HEADER 段 IMAGE_SECTION_HEADER PE 是COFF的扩展,文件最开始是DOS MZ格式的文件头和桩代码。 IMAGE_NT_HEADERS DOS下可执行文件格式是“MZ”格式。 DOS Stub是一段可以在D.........
    ▪OD被Anti的原因分析及应对之道(转载)      标 题: 【原创】OD被Anti的原因分析及应对之道作 者: tangjiutao时 间: 2009-12-02,22:21:56链 接: http://bbs.pediy.com/showthread.php?t=102366本文链接:http://bbs.pediy.com/showthread.php?t=102366OD载入程序就自动退出是.........
    ▪Linux下的管道编程技术      http://www.pcdog.com/edu/linux/13/11/y237288.html管道技术是Linux的一种基本的进程间通信技术。在本文中,我们将为读者介绍管道技术的模型,匿名管道和命名管道技术的定义和区别,以及这两种管道的.........

[1]234 - 问,PE COFF相关数据结构
    来源:    发布时间: 2013-11-15

COFF

文件头及若干段

文件头 IMAGE_FILE_HEADER

段 IMAGE_SECTION_HEADER

PE

是COFF的扩展,文件最开始是DOS MZ格式的文件头和桩代码。

IMAGE_NT_HEADERS

DOS下可执行文件格式是“MZ”格式。

DOS Stub是一段可以在DOS下运行的一小段代码。



朱峰everettjf 2013-01-06 19:44 发表评论

    
[2]OD被Anti的原因分析及应对之道(转载)
    来源:    发布时间: 2013-11-15
标 题: 【原创】OD被Anti的原因分析及应对之道
作 者: tangjiutao
时 间: 2009-12-02,22:21:56
链 接: http://bbs.pediy.com/showthread.php?t=102366

本文链接:http://bbs.pediy.com/showthread.php?t=102366
OD载入程序就自动退出是比较恼人的,还没开始调试呢就退出了,这可让人如何是好。初学破解的人一定会遇到这个问题,怎样解决呢,网上虽然有零星的介绍但都不全面,以下是我总结的一些,希望能对各位初学者有所帮助。
(比如Peid、FI查壳查不到,OD一载入就退出,这极有可能是VMProtect的保护(虚拟机保护),用EXEinfo可以查出来一些版本的VMP,如果有这个提示那就更确定无疑了“A debugger has been found running in your system.Please, unload it from memory and restart your program”。)
1.更换几个OD试试,OllyICE、Shadow、加强版等
2.用附加的方式加载程序,文件-->附加,能解决很多问题
3.OD目录下,将475K 的DbgHelp.dll文件换成近1M大小的DbgHelp.dll文件,475K的有溢出漏洞,这条比较关键
4.使用StrongOD插件,(StrongOD+原版OD试试),这条比较关键
5.StrongOD中选择CreateAsRestrict
6.尝试命令bp ExitProcess,看能否发现什么线索
7.改变ollydbg.ini中的驱动名称,修改版的OD不需要自己改     
DriverName                 -      驱动文件名,设备对象名
DriverKey                     -     和驱动通信的key
HideWindow                 -    是否隐藏窗口,1为隐藏,0为不隐藏
HideProcess                 -     是否隐藏od进程,1为隐藏,0为不隐藏
ProtectProcess             -     是否隐藏保护Od进程,1为保护,0为不保护
8.改OD窗体类名,用的修改版的话一般都改过了,不需要自己再改
方法如下:
主窗体类名:
引用:
VA:004B7218
Offset:000B6018
各子窗体类名:
引用:
VA:004B565B ~ 004B568A
Offset:000B445B ~ 000B448A
改成任意,可以过GetWindow检测
9.手动修改程序“导出表”中的“函数名数目”值,上面方法不管用再试试它
方法:使用“LordPE”打开要编辑的PE程序,然后依次选择[目录]->[导出表对应的“..”按钮],把“函数名数目”的值减1,并点击“保存”按钮,就OK了。为了好看些,也可以把“函数数目”和“函数名数目”的值都同时减1并保存,效果一样。
   解释:一般情况下EXE不会加“导出表”,如果加了,就应该给出所导出的API函数。当我们打开这类PE程序(EXE版)时,会发现它存在“导出表”,但“导出表”中并没有导出的API函数。同时“函数数目”和“函数名数目”的值都比原PE程序设置的值大了1(如:EXE版“导出表”列表中显示了0个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了1;DLL版“导出表”列表中显示了0xD个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了0xE。)。所以我们将其减1,就OK了。被修改过的PE程序,可以正常运行,不会有任何影响。

 这只是我的一点总结,附加方式加载、替换DBGHELP.DLL、使用StrongOD插件和修改导出表函数名数目的方法是可行的,能够解决一些问题。当然这些方法可能并不全面。

ANTI-OD原因解读:
 概括来说:TLS回调函数在入口点之前执行,并进行了ANTI-OD的操作.
 具体请看:TLS数据初始化和TLS回调函数都会在入口点之前执行,也就是说TLS是程序最开始运行的地方,因此可以在这里防止ANTI-OD的代码,检测并关闭OD。
 应对方法:
  默认情况下OllyDbg载入程序将会暂停在入口点,应该配置一下OllyDbg使其在TLS回调被调用之前中断在实际的loader。
  通过“选项->调试选项->事件->第一次中断于->系统断点”来设置中断于ntdll.dll内的实际loader代码。这样设置以后,OllyDbg将会中断在位于执行TLS回调的ntdll!LdrpRunInitializeRoutines()之前的ntdll!_LdrpInitializeProcess(),这时就可以在回调例程中下断并跟踪了。例如:在内存映像的.text代码段上设置内存访问断点,就可以断在TLS回调函数里。

更多TLS内容请看我的两篇博文:
TLS回调函数,Anti-od原理分析:http://hi.baidu.com/tjt999/blog/item...808f7eff1.html
TLS回调函数,Anti-od实例: http://hi.baidu.com/tjt999/blog/item...f359bf7f3.html

更多反调试知识请看《脱壳的艺术》和我的
《各种反调试技术原理与实例》: http://bbs.pediy.com/showthread.php?t=106143
如需交流请进群:1684360

实例代码:程序见附件,用原版OD测试,参考了某位大虾的代码。
.386
.model   flat,stdcall
option   casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

.data?
dwTLS_Index dd  ?

OPTION    DOTNAME
;; 定义一个TLS节          
.tls  SEGMENT                        
TLS_Start LABEL  DWORD
 dd    0100h    dup ("slt.")
TLS_End   LABEL  DWORD
.tls   ENDS
OPTION    NODOTNAME

.data
TLS_CallBackStart  dd  TlsCallBack0
TLS_CallBackEnd    dd  0
szTitle            db  "Hello TLS",0
szInTls            db  "我在TLS里",0
szInNormal         db  "我在正常代码内",0
szClassName        db  "ollydbg"        ; OD 类名
;这里需要注意的是,必须要将此结构声明为PUBLIC,用于让连接器连接到指定的位置,
;其次结构名必须为_tls_uesd这是微软的一个规定。编译器引入的位置名称也如此。
PUBLIC _tls_used
_tls_used IMAGE_TLS_DIRECTORY <TLS_Start, TLS_End, dwTLS_Index, TLS_CallBackStart, 0, ?>

.code
;***************************************************************
;; TLS的回调函数
TlsCallBack0 proc Dllhandle:LPVOID,dwReason:DWORD,lpvReserved:LPVOID  
     mov     eax,dwReason ;判断dwReason发生的条件
     cmp     eax,DLL_PROCESS_ATTACH  ; 在进行加载时被调用
     jnz     ExitTlsCallBack0
     invoke  FindWindow,addr szClassName,NULL  ;通过类名进行检测
     .if     eax     ;找到
             invoke    SendMessage,eax,WM_CLOSE,NULL,NULL
     .endif
     invoke &
    
[3]Linux下的管道编程技术
    来源:    发布时间: 2013-11-15

http://www.pcdog.com/edu/linux/13/11/y237288.html

管道技术是Linux的一种基本的进程间通信技术。在本文中,我们将为读者介绍管道技术的模型,匿名管道和命名管道技术的定义和区别,以及这两种管道的创建方法。同时,阐述如何在应用程序和命令行中通过管道进行通信的详细方法。

    一、管道技术模型 

    管道技术是Linux操作系统中历来已久的一种进程间通信机制。所有的管道技术,无论是半双工的匿名管道,还是命名管道,它们都是利用FIFO排队模型来指挥进程间的通信。对于管道,我们可以形象地把它们当作是连接两个实体的一个单向连接器。例如,请看下面的命令:
  

ls -1 | wc -l


    该命令首先创建两个进程,一个对应于ls –1,另一个对应于wc –l。然后,把第一个进程的标准输出设为第二个进程的标准输入(如图1所示)。它的作用是计算当前目录下的文件数量。

点击查看大图

 

图1:管道示意图 



    如上图所示,前面的例子实际上就是在两个命令之间建立了一根管道(有时我们也将之称为命令的流水线操作)。第一个命令ls执行后产生的输出作为了第二个命令wc的输入。这是一个半双工通信,因为通信是单向的。两个命令之间的连接的具体工作,是由内核来完成的。下面我们将会看到,除了命令之外,应用程序也可以使用管道进行连接。

二、信号和消息的区别

    我们知道,进程间的信号通信机制在传递信息时是以信号为载体的,但管道通信机制的信息载体是消息。那么信号和消息之间的区别在哪里呢? 

    首先,在数据内容方面,信号只是一些预定义的代码,用于表示系统发生的某一状况;消息则为一组连续语句或符号,不过量也不会太大。在作用方面,信号担任进程间少量信息的传送,一般为内核程序用来通知用户进程一些异常情况的发生;消息则用于进程间交换彼此的数据。 

    在发送时机方面,信号可以在任何时候发送;信息则不可以在任何时刻发送。在发送者方面,信号不能确定发送者是谁;信息则知道发送者是谁。在发送对象方面,信号是发给某个进程;消息则是发给消息队列。在处理方式上,信号可以不予理会;消息则是必须处理的。在数据传输效率方面,信号不适合进大量的信息传输,因为它的效率不高;消息虽然不适合大量的数据传送,但它的效率比信号强,因此适于中等数量的数据传送。 

    三、管道和命名管道的区别 

    我们知道,命名管道和管道都可以在进程间传送消息,但它们也是有区别的。 

    管道技术只能用于连接具有共同祖先的进程,例如父子进程间的通信,它无法实现不同用户的进程间的信息共享。再者,管道不能常设,当访问管道的进程终止时,管道也就撤销。这些限制给它的使用带来不少限制,但是命名管道却克服了这些限制。 

    命名管道也称为FIFO,是一种永久性的机构。FIFO文件也具有文件名、文件长度、访问许可权等属性,它也能像其它Linux文件那样被打开、关闭和删除,所以任何进程都能找到它。换句话说,即使是不同祖先的进程,也可以利用命名管道进行通信。 

    如果想要全双工通信,那最好使用Sockets API。下面我们分别介绍这两种管道,然后详细说明用来进行管道编程的编程接口和系统级命令。

四、管道编程技术 

    在程序中利用管道进行通信时,根据通信主体大体可以分为两种情况:一种是具有共同祖先的进程间的通信,比较简单;另一种是任意进程间通信,相对较为复杂。下面我们先从较为简单的进程内通信开始介绍。 

    1. 具有共同祖先的进程间通信管道编程 

    为了了解管道编程技术,我们先举一个例子。在这个例中,我们将在进程中新建一个管道,然后向它写入一个消息,管道读取消息后将其发出。代码如下所示: 

    示例代码1:管道程序示例 

1: #include <unistd.h> 2: #include <stdio.h> 3: #include <string.h> 4: 5: #define MAX_LINE 80 6: #define PIPE_STDIN 0 7: #define PIPE_STDOUT 1 8: 9: int main() 10: ...{ 11: const char *string=...{"A sample message."}; 12: int ret, myPipe[2]; 13: char buffer[MAX_LINE+1]; 14: 15: /**//* 建立管道 */ 16: ret = pipe( myPipe ); 17: 18: if (ret == 0) ...{ 19: 20: /**//* 将消息写入管道 */ 21: write( myPipe[PIPE_STDOUT], string, strlen(string) ); 22: 23: /**//* 从管道读取消息 */ 24: ret = read( myPipe[PIPE_STDIN], buffer, MAX_LINE ); 25: 26: /**//* 利用Null结束字符串 */ 27: buffer[ ret ] = 0; 28: 29: printf("%s\n", buffer); 30: 31: } 32: 33: return 0; 34: }

   
    上面的示例代码中,我们利用pipe调用新建了一个管道,参见第16行代码。 我们还建立了一个由两个元素组成的数组,用来描述我们的管道。我们的管道被定义为两个单独的文件描述符,一个用来输入,一个用来输出。我们能从管道的一端输入,然后从另一端读出。如果调用成功,pipe函数返回值为0。返回后,数组myPipe中存放的是两个新的文件描述符,其中元素myPipe[1]包含的文件描述符用于管道的输入,元素myPipe[0] 包含的文件描述符用于管道的输出。

    在第21行代码,我们利用write函数把消息写入管道。站在应用程序的角度,它是在向stdout输出。现在,该管道存有我们的消息,我们可以利用第24行的read函数来读它。对于应用程序来说,我们是利用stdin描述符从管道读取消息的。read函数把从管道读取的数据存放到buffer变量中。然后在buffer变量的末尾添加一个NULL,这样就能利用printf函数正确的输出它了。在本例中的管道可以利用下图解释:

点击查看大图

 

图2:示例代码1中半双工管道的示意图

    这个例子中,通信是在具有共同祖先的进程间发生的,即父进程和子进程通信。这样做局限性太大,但我们只是用它来给读者一个感性的认识。接下来,我们将介绍更为高级的进程间的管道通信。

 2.进程间通信管道编程 

    在利用管道技术进行编程时,处理要用到上面介绍的pipe函数外,还用到另外三个函数,如下所示。

 pipe函数:该函数用于创建一个新的匿名管道。

 dup函数:该函数用于拷贝文件描述符。

 mkfifo函数:该函数用于创建一个命名管道(fifo)。 

    当然,在管道通

    
最新技术文章:
▪修改月光博客网站中PHP常用正则表达式中出现...
▪js正则判断非法字符限制输入
▪通过正则表达式删除空行的方法
▪一个好用的正则匹配电话号手机号邮箱网址的...
▪JS 正则表达式用法介绍
▪几个小例子教你如何实现正则表达式highlight高...
▪如何实现正则表达式的JavaScript的代码高亮
▪js 玩转正则表达式之语法高亮
▪PHP中过滤常用标签的正则表达式
▪js 正则表达式学习笔记之匹配字符串
▪使用正则表达式匹配[***]样式的字符串
▪史上最详细的js日期正则表达式分享
▪php+正则将字符串中的字母数字和中文分割
▪正则表达式不区分大小写以及解决思路的探索...
▪正则替换换行符和把 br 替换成换行符
▪正则表达式匹配不包含某些字符串的技巧
▪匹配form表单中所有内容的正则表达式
▪正则表达式(括号)、[中括号]、{大括号}的区别...
▪正则表达式中的"g"是什么意思附件参数g的用...
▪浅谈正则表达式(Regular Expression)
▪Python正则表达式的七个使用范例详解
▪正则表达式提取img的src
▪常用的正则表达式集锦
▪使用正则表达式找出不包含特定字符串的条目...
▪js正则表达式中的问号几种用法小结
▪正则表达式概述 什么是正则表达式 .
▪ajax对注册名进行验证检测是否存在于数据库...
▪js正则解析URL参数示例代码
▪JS使用正则去除字符串最后的逗号
▪几种常见攻击的正则表达式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3