网络安全学习第1篇 - 简单使用ida工具和破解分析

实验目的

目的:了解使用ida工具和破解分析(题目如下)

请使用IDA等工具逆向分析Sample_1、Sample_2以及Sample_3这三个exe文件。
说明:
1、IDA Pro下载链接:https://pan.baidu.com/s/1ErHbDG70jD-bg9eW_rEPsA
提取码:91sc
1、IDA查看地址方法:Options->General,在Line prefixes前面打勾。
2、Sample_1分析范围:0x00401000至0x0040104A;Sample_2分析范围:0x00401000至0x0040105E;Sample_3分析范围:0x00401000至0x00401062。
3、写出关键API函数的功能、重点参数的含义以及流程跳转逻辑等

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

实验内容

实验开始准备阶段:

首先下载资源,然后把自己电脑的杀毒软件关掉,因为Sample_3带有自动复制文件的功能,会被杀毒软件认为是病毒。所以要把杀毒软件关掉。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                              Sample_1

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1、Sample_1

通过cmd运行exe文件,首先要添加文件的后缀名,如果没有后缀名,cmd不能识别这个文件。

cmd运行程序如下:

 

 

分析代码如下:

 

.text:00401000 _wWinMain@16 proc near

 -- WinMain@16是Windows的图形界面的启动函数,VC里面的启动部分会调用这个开始程序的运行。

 -- proc near 如果你的子程序和主程序在同一个代码段,则使用near,调用发生后,主程序堆栈中只压入ip值;如果你的子程序和主程序不在一个代码段,则使用far,调用发生后,主程序堆栈中将压入cs、ip值;

 

注:

  1. 对于一个不是GUI(图形界面)的程序而言,开始的函数叫做main,对于一个非图形界面的程序来说可能没有定义这个WinMain@16函数,所以就无法找到WinMain@16。找不到就无法启动这个程序。所以你应该查看是否存在函数WinMain,如果不存在,看看是否存在main,如果存在main,修改为控制台(CONSOLE)类型就可以了,有些系统的入口点是_tmain等等,具体看手册。

 

  1. CS为代码段寄存器,IP为指令指针寄存器,从名称上我们可以看出它们和指令的关系。在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

 

链接:

(3)http://blog.sina.com.cn/s/blog_6471e1bb0100i3mr.html - 关于汇编中proc near与proc far的用法

 

 

.text:00401000

.text:00401000 hInstance= dword ptr  8

.text:00401000 hPrevInstance= dword ptr  0Ch

.text:00401000 lpString1= dword ptr  10h

.text:00401000 nShowCmd= dword ptr  14h

 

解释:所有参数的大小都是dword,也就是4字节,而总共4个参数,那么就是16个字节大小,转换成16进制,就变成了10H,所以在函数调用结束后,需要10H的大小来恢复栈。

 

HINSTANCE 是“句柄型”数据类型。相当于装入到了内存的资源的ID。HINSTANCE对应的资源是instance.句柄实际上是一个 无符号长整数。但它是“句柄型”,所以你不能把它当成真的无符号长整数,拿来派别的用处,例如,不能拿来做四则运算。HINSTANCE常出现在 API 程序:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)

 

注:

  1. 汇编语言中PTR的含义(很全) 汇编里面ptr 是规定的字(既保留字),是用来临时指定类型的。 mov ax,word ptr [bx]; 是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。 ... 总结,既有寄存器时可以,且一般不用ptr;没有时一定要用(防止当两个操作数的宽度不一样)。

 

 

.text:00401000

.text:00401000 push    ebp ;     保护先前EBP指针, EBP入栈 

.text:00401001 mov     ebp, esp ;        设置EBP指针指向栈顶

.text:00401003 mov     eax, [ebp+lpString1];    调用参数lpString1(通过栈顶指针EBP地址偏移10h得到lpString1的地址)

.text:00401006 push    offset String2  ; "2012"

.text:0040100B push    eax             ; lpString1

 

这两句push应该是在压参数。

 

.text:0040100C call    ds:lstrcmpW

.text:00401012 push    0               ; uType

.text:00401014 push    offset Caption  ; "MESSAGE"

.text:00401019 test    eax, eax

.text:0040101B jnz     short loc_4010

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值