首页
论坛
课程
招聘
[求助]看《加密与解密》的一些疑问
2006-7-21 12:13 3967

[求助]看《加密与解密》的一些疑问

jdxyw 活跃值
19
2006-7-21 12:13
3967
本人最近才开始学习加密与解密,由于先前就有一些汇编,Win32,C的编程的基础知识,所以就买了本《加密与解密》的书来学习。现在已经看了前三章,有些疑问,想请大家帮忙解决下。我曾尝试着在论坛里进行搜索,看是不是有人已经解决了这个问题,也许我的问题比较菜,或是关键词没用好吧,所以只好发帖一问。
    第一个问题是,在第三章讲到静态分析技术的时候,在讲解IDA Pro的手工识别代码和数据的功能,我有个疑惑。识别字符串,我能够理解,但是如何可以区别出代码和数据呢?这里有什么比较明显的地方可以看出来。还有就是数组的识别。我照着书上的例子看,数组的地方,似乎是字符串。
    第二是,我是这样理解程序入口点,和代码入口。我是不是可以这样理解,程序入口点,是先于代码入口的,里面进行着一些程序的初始化工作,而我们自己编的程序,是从代码入口处进入的?不知我这样理解似乎正确。
    在这先谢谢各位了!

2021 KCTF 秋季赛 防守篇-征题倒计时(11月14日截止)!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 425
活跃值: 活跃值 (6769)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2006-7-21 13:15
2
0
最初由 jdxyw 发布
识别字符串,我能够理解,但是如何可以区别出代码和数据呢?这里有什么比较明显的地方可以看出来


IDA不能区别是代码与数据时,那得靠人去判断了。有时是凭感觉了。

最初由 jdxyw 发布
第二是,我是这样理解程序入口点,和代码入口。我是不是可以这样理解,程序入口点,是先于代码入口的,里面进行着一些程序的初始化工作,而我们自己编的程序,是从代码入口处进入的?不知我这样理解似乎正确。
在这先谢谢各位了!


在编写Win32应用程序时,都必须在源码里实现一个WinMain函数。但Windows程序执行并不是从WinMain函数开始的,首先被执行的是启动函数相关代码,这段代码是编译器生成的。启动代码完成初始化进程,再调用WinMain。
例如VC程序:
调用WinMain如下所示:
GetStartupInfo (&StartupInfo);
Int nMainRetVal = WinMain(GetModuleHandle(NULL),NULL,pszCommandLineAnsi,(StartupInfo.dwFlags&STARTF_USESHOWWINDOW)?StartupInfo.wShowWindow:SW__SHOWDEFAULT);

你所说的代码入口,应是WinMain()函数起点。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
jdxyw 活跃值 19 2006-7-21 13:27
3
0
最初由 kanxue 发布
IDA不能区别是代码与数据时,那得靠人去判断了。有时是凭感觉了。

我的意思是说,怎么从一堆反汇编后的代码中去辨认出,原本看似无关的一些东西是代码,或是数据。
雪    币: 425
活跃值: 活跃值 (6769)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2006-7-21 13:36
4
0
最初由 jdxyw 发布
我的意思是说,怎么从一堆反汇编后的代码中去辨认出,原本看似无关的一些东西是代码,或是数据。


经验

CODE:0041C28B                 mov     esi, eax
CODE:0041C28D                 mov     edx, esp
CODE:0041C28F                 mov     eax, esi
CODE:0041C291                 call    sub_41BF1C
CODE:0041C291
CODE:0041C296                 mov     [esp+8], bl
CODE:0041C29A                 mov     edx, esp
CODE:0041C29C                 mov     eax, esi
CODE:0041C29E                 call    sub_41BF34
CODE:0041C29E
CODE:0041C2A3                 add     esp, 2Ch
CODE:0041C2A6                 pop     esi
CODE:0041C2A7                 pop     ebx
CODE:0041C2A8                 retn
CODE:0041C2A8
CODE:0041C2A8 ; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CODE:0041C2A9                 db  8Dh ; ?         
CODE:0041C2AA                 db  40h ; @
CODE:0041C2AB                 db    0
CODE:0041C2AC                 db  8Bh ; ?
CODE:0041C2AD                 db  40h ; @
CODE:0041C2AE                 db  10h
CODE:0041C2AF                 db  8Ah ; ?
CODE:0041C2B0                 db  40h ; @
CODE:0041C2B1                 db  1Ah
CODE:0041C2B2                 db 0C3h ; ?
CODE:0041C2B3                 db  90h ; ?
CODE:0041C2B4                 db  53h ; S

例如上面一段是代码,但IDA将其当成数据了,你尝试按C键,得到汇编代码,并且这段汇编代码流程也合理,那这段数据就是代码了:

CODE:0041C2A9                 lea     eax, [eax+0]
CODE:0041C2AC                 mov     eax, [eax+10h]
CODE:0041C2AF                 mov     al, [eax+1Ah]
CODE:0041C2B2                 retn
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
jdxyw 活跃值 19 2006-7-21 15:32
5
0
谢谢指教啊
游客
登录 | 注册 方可回帖
返回