视频笔记(一)

第二课:

1、定位到是否注册的代码

1)运行程序

2)打开可执行模块窗口,双击本程序的模块,进入到反汇编窗口,如果代码如下所示:

00401000     6A             DB 6A                                    ;  CHAR 'j'
00401001     FF             DB FF
00401002     68             DB 68                                    ;  CHAR 'h'
00401003     57             DB 57                                    ;  CHAR 'W'
00401004     BB             DB BB
00401005     45             DB 45                                    ;  CHAR 'E'
00401006     00             DB 00

 则可以在该区域右键->分析->从模块中删除分析,就可以看到反汇编代码,如下所示:

00401000   6A FF            PUSH -0x1
00401002   68 57BB4500      PUSH LogSee.0045BB57
00401007   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
0040100D   50               PUSH EAX

 3)查找所有字符串,找到含有“未注册”字样的字符串,发现在这些字符串前都有

00409460   833D 30BA4700 00 CMP DWORD PTR DS:[0x47BA30],0x0  这一句,由此可确定是否注册的判断值放在DWORD PTR DS:[0x47BA30]内存中

4)在反汇编窗口,右键->查找->所有常量,查找0X47BA30,查找结果如下:

参考位于 LogSee:    到常量 47BA30
地址       反汇编                                    注释
00406354   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00408558   CMP DWORD PTR DS:[0x47BA30],EBX
00408768   MOV DWORD PTR DS:[0x47BA30],EBX
00409460   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00410B7E   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00410F3F   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00411186   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
004114BF   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
004117FE   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00411EDC   CMP DWORD PTR DS:[0x47BA30],EBP
004123E7   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
004126F8   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000
00412A6F   MOV DWORD PTR DS:[0x47BA30],0x1           (初始 CPU 选择)
00412CF6   MOV DWORD PTR DS:[0x47BA30],0x1           DS:[0047BA30]=00000000
00414278   CMP DWORD PTR DS:[0x47BA30],0x0           DS:[0047BA30]=00000000

重点关注红色的三行结果, 大概就是我们想要找的地方了,结合上下文的代码,或者下断跟踪调试,即可定位到判断是否已注册的地方。

 

 

第四课

1、定位到关键call

有些程序在搜索字符串的时候,会搜索到多个“注册码不正确”的字符串,在使用这些字符串的代码前面基本都有类似如下的代码:

0059D1EF  |.  59            pop ecx                                  ;  recorder.0059D1F5
0059D1F0  |.  E8 AFF8FFFF   call recorder.0059CAA4
0059D1F5  |.  84C0          test al,al
0059D1F7  |.  74 04         je short recorder.0059D1FD

关注红色的那一行,如果多次出现类似的代码,则大概就可以判断0059CAA4 是一个关键call。(方法与第二课中的类似)

 

2、retn和retn 0x4的问题

在找到关键call后,可以修改关键call的代码,直接设置eax的值,然后返回。查看这个call的代码,发现函数返回有retn 和retn 0x4两种形式,如果不知具体该用哪一种形式,可以两种都试试,也可以对该函数进行跟踪,先跑一遍,看看是由哪一种形式返回的,即可确定了。

如果对关键跳转进行了修改而程序仍旧提示未注册的话,很有可能就是有多处判断,这种情况下,就只能去找关键call并修改返回值了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值