环境:

Windows xp sp3

工具:

exeinfope, ollydbg

查壳:

用exeinfope查壳,发现加了壳 -- WWPack32 ver 1.xx ,用f8单步调试法,脱壳。

脱掉之后发现是delphi写的

运行之后发现界面整洁,目标明确,输入一个serial后会生成一串数字,使得生成的数字和界面的数字相同。

因为这次即使输入不正确,也不会出现错误提示。幸好,当serial为空的时候点“spider"会有错误消息框出现。

在栈中找到这次错误消息框函数调用的位置,下断点,再输入serial,观察是否被断下,如果没有就找更前一点的函数调用的位置。

直到当输入serial后点确定会被断下来。

可以找到这里:

0044A314  |.  E8 EFD6FBFF   call unpack.00407A08
0044A319  |.  8BF0          mov esi,eax
0044A31B  |.  8B45 FC       mov eax,[local.1]
0044A31E  |.  E8 5DD7FBFF   call unpack.00407A80                     ;  这里是算出serial的值的地方
0044A323  |.  52            push edx
0044A324  |.  50            push eax
0044A325  |.  8BC6          mov eax,esi
0044A327  |.  99            cdq
0044A328  |.  030424        add eax,dword ptr ss:[esp]               ;  这里是加上算出来的值
0044A32B  |.  135424 04     adc edx,dword ptr ss:[esp+0x4]
0044A32F  |.  83C4 08       add esp,0x8
0044A332  |.  52            push edx
0044A333  |.  50            push eax
0044A334  |.  8BC6          mov eax,esi
0044A336  |.  99            cdq
0044A337  |.  030424        add eax,dword ptr ss:[esp]               ;  这里也是,所以可以理解为算出的serial *= 3
0044A33A  |.  135424 04     adc edx,dword ptr ss:[esp+0x4]
0044A33E  |.  83C4 08       add esp,0x8

在0044A31E进去:

00407A80  /$  55            push ebp
00407A81  |.  8BEC          mov ebp,esp
00407A83  |.  83C4 E8       add esp,-0x18
00407A86  |.  53            push ebx
00407A87  |.  33D2          xor edx,edx
00407A89  |.  8955 F0       mov [local.4],edx
00407A8C  |.  8BD8          mov ebx,eax
00407A8E  |.  33C0          xor eax,eax
00407A90  |.  55            push ebp
00407A91  |.  68 EB7A4000   push unpack.00407AEB
00407A96  |.  64:FF30       push dword ptr fs:[eax]
00407A99  |.  64:8920       mov dword ptr fs:[eax],esp
00407A9C  |.  8D55 F4       lea edx,[local.3]
00407A9F  |.  8BC3          mov eax,ebx
00407AA1  |.  E8 4ECEFFFF   call unpack.004048F4                     ;  这里是计算的地方
00407AA6  |.  8945 F8       mov [local.2],eax
00407AA9  |.  8955 FC       mov [local.1],edx
00407AAC  |.  837D F4 00    cmp [local.3],0x0
00407AB0  |.  74 23         je Xunpack.00407AD5
00407AB2  |.  8D55 F0       lea edx,[local.4]
00407AB5  |.  A1 7CBC4400   mov eax,dword ptr ds:[0x44BC7C]
00407ABA  |.  E8 2DD6FFFF   call unpack.004050EC
00407ABF  |.  8B45 F0       mov eax,[local.4]
00407AC2  |.  50            push eax
00407AC3  |.  895D E8       mov [local.6],ebx
00407AC6  |.  C645 EC 0B    mov byte ptr ss:[ebp-0x14],0xB
00407ACA  |.  8D55 E8       lea edx,[local.6]
00407ACD  |.  33C9          xor ecx,ecx
00407ACF  |.  58            pop eax
00407AD0  |.  E8 B7FCFFFF   call unpack.0040778C
00407AD5  |>  33C0          xor eax,eax
00407AD7  |.  5A            pop edx
00407AD8  |.  59            pop ecx
00407AD9  |.  59            pop ecx
00407ADA  |.  64:8910       mov dword ptr fs:[eax],edx
00407ADD  |.  68 F27A4000   push unpack.00407AF2
00407AE2  |>  8D45 F0       lea eax,[local.4]
00407AE5  |.  E8 72BDFFFF   call unpack.0040385C
00407AEA  \.  C3            retn

在00407AA1跟进去:

004048F4  /$  53            push ebx
004048F5  |.  56            push esi
004048F6  |.  57            push edi
004048F7  |.  55            push ebp
004048F8  |.  83C4 EC       add esp,-0x14
004048FB  |.  891424        mov dword ptr ss:[esp],edx
004048FE  |.  8BF0          mov esi,eax
00404900  |.  BD 01000000   mov ebp,0x1
00404905  |.  33FF          xor edi,edi
00404907  |.  C74424 08 000>mov dword ptr ss:[esp+0x8],0x0
0040490F  |.  C74424 0C 000>mov dword ptr ss:[esp+0xC],0x0
00404917  |.  85F6          test esi,esi
00404919  |.  75 0B         jnz Xunpack.00404926
0040491B  |.  8B0424        mov eax,dword ptr ss:[esp]
0040491E  |.  8928          mov dword ptr ds:[eax],ebp
00404920  |.  E9 E1010000   jmp unpack.00404B06
00404925  |>  45            /inc ebp
00404926  |>  807C2E FF 20   cmp byte ptr ds:[esi+ebp-0x1],0x20
0040492B  |.^ 74 F8         \je Xunpack.00404925
0040492D  |.  C64424 10 00  mov byte ptr ss:[esp+0x10],0x0
00404932  |.  8A442E FF     mov al,byte ptr ds:[esi+ebp-0x1]
00404936  |.  3C 2D         cmp al,0x2D
00404938  |.  75 08         jnz Xunpack.00404942
0040493A  |.  C64424 10 01  mov byte ptr ss:[esp+0x10],0x1
0040493F  |.  45            inc ebp
00404940  |.  EB 05         jmp Xunpack.00404947
00404942  |>  3C 2B         cmp al,0x2B
00404944  |.  75 01         jnz Xunpack.00404947
00404946  |.  45            inc ebp
00404947  |>  B3 01         mov bl,0x1
00404949  |.  807C2E FF 24  cmp byte ptr ds:[esi+ebp-0x1],0x24
0040494E  |.  74 1B         je Xunpack.0040496B
00404950  |.  807C2E FF 30  cmp byte ptr ds:[esi+ebp-0x1],0x30
00404955  |.  0F85 DA000000 jnz unpack.00404A35
0040495B  |.  8A042E        mov al,byte ptr ds:[esi+ebp]
0040495E  |.  E8 99DEFFFF   call unpack.004027FC
00404963  |.  3C 58         cmp al,0x58
00404965  |.  0F85 CA000000 jnz unpack.00404A35
0040496B  |>  807C2E FF 30  cmp byte ptr ds:[esi+ebp-0x1],0x30
00404970  |.  75 01         jnz Xunpack.00404973
00404972  |.  45            inc ebp
00404973  |>  45            inc ebp
00404974  |>  8A442E FF     /mov al,byte ptr ds:[esi+ebp-0x1]
00404978  |.  8BD0          |mov edx,eax
0040497A  |.  80C2 D0       |add dl,0xD0                             ;  Switch (cases FFFFFD61..FFFFFF39)
0040497D  |.  80EA 0A       |sub dl,0xA
00404980  |.  72 12         |jb Xunpack.00404994
00404982  |.  80C2 F9       |add dl,0xF9
00404985  |.  80EA 06       |sub dl,0x6
00404988  |.  72 17         |jb Xunpack.004049A1
0040498A  |.  80C2 E6       |add dl,0xE6
0040498D  |.  80EA 06       |sub dl,0x6
00404990  |.  72 1C         |jb Xunpack.004049AE
00404992  |.  EB 7A         |jmp Xunpack.00404A0E
00404994  |>  8BF8          |mov edi,eax                             ;  Cases FFFFFF30,FFFFFF31,FFFFFF32,FFFFFF33,FFFFFF34,FFFFFF35,FFFFFF36,FFFFFF37,FFFFFF38,FFFFFF39 of switch 0040497A
00404996  |.  81E7 FF000000 |and edi,0xFF
0040499C  |.  83EF 30       |sub edi,0x30
0040499F  |.  EB 18         |jmp Xunpack.004049B9
004049A1  |>  8BF8          |mov edi,eax                             ;  Cases FFFFFE41,FFFFFE42,FFFFFE43,FFFFFE44,FFFFFE45,FFFFFE46 of switch 0040497A
004049A3  |.  81E7 FF000000 |and edi,0xFF
004049A9  |.  83EF 37       |sub edi,0x37
004049AC  |.  EB 0B         |jmp Xunpack.004049B9
004049AE  |>  8BF8          |mov edi,eax                             ;  Cases FFFFFD61,FFFFFD62,FFFFFD63,FFFFFD64,FFFFFD65,FFFFFD66 of switch 0040497A
004049B0  |.  81E7 FF000000 |and edi,0xFF
004049B6  |.  83EF 57       |sub edi,0x57
004049B9  |>  837C24 0C 00  |cmp dword ptr ss:[esp+0xC],0x0
004049BE  |.  75 09         |jnz Xunpack.004049C9
004049C0  |.  837C24 08 00  |cmp dword ptr ss:[esp+0x8],0x0
004049C5  |.  72 47         |jb Xunpack.00404A0E
004049C7  |.  EB 02         |jmp Xunpack.004049CB
004049C9  |>  7C 43         |jl Xunpack.00404A0E
004049CB  |>  817C24 0C FFF>|cmp dword ptr ss:[esp+0xC],0xFFFFFFF
004049D3  |.  75 09         |jnz Xunpack.004049DE
004049D5  |.  837C24 08 FF  |cmp dword ptr ss:[esp+0x8],-0x1
004049DA  |.  76 04         |jbe Xunpack.004049E0
004049DC  |.  EB 30         |jmp Xunpack.00404A0E
004049DE  |>  7F 2E         |jg Xunpack.00404A0E
004049E0  |>  8BC7          |mov eax,edi
004049E2  |.  99            |cdq
004049E3  |.  52            |push edx
004049E4  |.  50            |push eax
004049E5  |.  8B4424 10     |mov eax,dword ptr ss:[esp+0x10]
004049E9  |.  8B5424 14     |mov edx,dword ptr ss:[esp+0x14]
004049ED  |.  0FA4C2 04     |shld edx,eax,0x4
004049F1  |.  C1E0 04       |shl eax,0x4
004049F4  |.  030424        |add eax,dword ptr ss:[esp]
004049F7  |.  135424 04     |adc edx,dword ptr ss:[esp+0x4]
004049FB  |.  83C4 08       |add esp,0x8
004049FE  |.  894424 08     |mov dword ptr ss:[esp+0x8],eax
00404A02  |.  895424 0C     |mov dword ptr ss:[esp+0xC],edx
00404A06  |.  45            |inc ebp
00404A07  |.  33DB          |xor ebx,ebx
00404A09  |.^ E9 66FFFFFF   \jmp unpack.00404974
00404A0E  |>  807C24 10 00  cmp byte ptr ss:[esp+0x10],0x0           ;  Default case of switch 0040497A
00404A13  |.  0F84 D3000000 je unpack.00404AEC
00404A19  |.  8B4424 08     mov eax,dword ptr ss:[esp+0x8]
00404A1D  |.  8B5424 0C     mov edx,dword ptr ss:[esp+0xC]
00404A21  |.  F7D8          neg eax
00404A23  |.  83D2 00       adc edx,0x0
00404A26  |.  F7DA          neg edx
00404A28  |.  894424 08     mov dword ptr ss:[esp+0x8],eax
00404A2C  |.  895424 0C     mov dword ptr ss:[esp+0xC],edx
00404A30  |.  E9 B7000000   jmp unpack.00404AEC
00404A35  |>  8A442E FF     /mov al,byte ptr ds:[esi+ebp-0x1]        ; 前面的作用也不大,主要看这里
00404A39  |.  8BD0          |mov edx,eax
00404A3B  |.  80C2 D0       |add dl,0xD0
00404A3E  |.  80EA 0A       |sub dl,0xA
00404A41  |.  73 62         |jnb Xunpack.00404AA5
00404A43  |.  8BF8          |mov edi,eax
00404A45  |.  81E7 FF000000 |and edi,0xFF                            ;
00404A4B  |.  83EF 30       |sub edi,0x30                            ; 这里是将输入的字符转成对应的值。
00404A4E  |.  837C24 0C 00  |cmp dword ptr ss:[esp+0xC],0x0
00404A53  |.  75 09         |jnz Xunpack.00404A5E
00404A55  |.  837C24 08 00  |cmp dword ptr ss:[esp+0x8],0x0
00404A5A  |.  72 49         |jb Xunpack.00404AA5
00404A5C  |.  EB 02         |jmp Xunpack.00404A60
00404A5E  |>  7C 45         |jl Xunpack.00404AA5
00404A60  |>  817C24 0C CCC>|cmp dword ptr ss:[esp+0xC],0xCCCCCCC
00404A68  |.  75 0C         |jnz Xunpack.00404A76
00404A6A  |.  817C24 08 CCC>|cmp dword ptr ss:[esp+0x8],0xCCCCCCCC
00404A72  |.  76 04         |jbe Xunpack.00404A78
00404A74  |.  EB 2F         |jmp Xunpack.00404AA5
00404A76  |>  7F 2D         |jg Xunpack.00404AA5
00404A78  |>  6A 00         |push 0x0
00404A7A  |.  6A 0A         |push 0xA
00404A7C  |.  8B4424 10     |mov eax,dword ptr ss:[esp+0x10]
00404A80  |.  8B5424 14     |mov edx,dword ptr ss:[esp+0x14]
00404A84  |.  E8 F30E0000   |call unpack.0040597C                    ; 这个call是将之前算出的值*0xA,第一次执行循环时为0
00404A89  |.  52            |push edx
00404A8A  |.  50            |push eax
00404A8B  |.  8BC7          |mov eax,edi
00404A8D  |.  99            |cdq
00404A8E  |.  030424        |add eax,dword ptr ss:[esp]              ; 这里是将上面的call算出来的值加上字符对应的值(也就是00404A4B算出的结果的值)
00404A91  |.  135424 04     |adc edx,dword ptr ss:[esp+0x4]
00404A95  |.  83C4 08       |add esp,0x8
00404A98  |.  894424 08     |mov dword ptr ss:[esp+0x8],eax
00404A9C  |.  895424 0C     |mov dword ptr ss:[esp+0xC],edx
00404AA0  |.  45            |inc ebp
00404AA1  |.  33DB          |xor ebx,ebx
00404AA3  |.^ EB 90         \jmp Xunpack.00404A35
00404AA5  |>  807C24 10 00  cmp byte ptr ss:[esp+0x10],0x0
00404AAA  |.  74 17         je Xunpack.00404AC3
00404AAC  |.  8B4424 08     mov eax,dword ptr ss:[esp+0x8]
00404AB0  |.  8B5424 0C     mov edx,dword ptr ss:[esp+0xC]
00404AB4  |.  F7D8          neg eax
00404AB6  |.  83D2 00       adc edx,0x0
00404AB9  |.  F7DA          neg edx
00404ABB  |.  894424 08     mov dword ptr ss:[esp+0x8],eax
00404ABF  |.  895424 0C     mov dword ptr ss:[esp+0xC],edx
00404AC3  |>  837C24 0C 00  cmp dword ptr ss:[esp+0xC],0x0
00404AC8  |.  75 05         jnz Xunpack.00404ACF
00404ACA  |.  837C24 08 00  cmp dword ptr ss:[esp+0x8],0x0
00404ACF  |>  74 1B         je Xunpack.00404AEC
00404AD1  |.  837C24 0C 00  cmp dword ptr ss:[esp+0xC],0x0
00404AD6  |.  75 0A         jnz Xunpack.00404AE2
00404AD8  |.  837C24 08 00  cmp dword ptr ss:[esp+0x8],0x0
00404ADD  |.  0F92C0        setb al
00404AE0  |.  EB 03         jmp Xunpack.00404AE5
00404AE2  |>  0F9CC0        setl al
00404AE5  |>  3A4424 10     cmp al,byte ptr ss:[esp+0x10]
00404AE9  |.  74 01         je Xunpack.00404AEC
00404AEB  |.  4D            dec ebp
00404AEC  |>  807C2E FF 00  cmp byte ptr ds:[esi+ebp-0x1],0x0
00404AF1  |.  0F95C0        setne al
00404AF4  |.  0AD8          or bl,al
00404AF6  |.  74 07         je Xunpack.00404AFF
00404AF8  |.  8B0424        mov eax,dword ptr ss:[esp]
00404AFB  |.  8928          mov dword ptr ds:[eax],ebp
00404AFD  |.  EB 07         jmp Xunpack.00404B06
00404AFF  |>  8B0424        mov eax,dword ptr ss:[esp]
00404B02  |.  33D2          xor edx,edx
00404B04  |.  8910          mov dword ptr ds:[eax],edx
00404B06  |>  8B4424 08     mov eax,dword ptr ss:[esp+0x8]
00404B0A  |.  8B5424 0C     mov edx,dword ptr ss:[esp+0xC]
00404B0E  |.  83C4 14       add esp,0x14
00404B11  |.  5D            pop ebp
00404B12  |.  5F            pop edi
00404B13  |.  5E            pop esi
00404B14  |.  5B            pop ebx
00404B15  \.  C3            retn

上面这段看上去很长,很复杂,其实就是将输入的serial从字符串转成数值,所以在0044A31E函数中返回的就是输入的serial对应的数值,然后将对应的数值乘以3,与“3E74984B”比较,是否相同。所以输入的serial应该是dec(3E74984B / 3) ,即"349276185"

160 - 20 BuLLeT.8相关推荐

  1. 第 20 章 观察者模式

    第 20 章 观察者模式 1.天气预报项目需求 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方) 需要设计开放型API ...

  2. 冰封王座1.20(转载)

    人族 步兵 17*420*1.32432432432432432432432432432432/1.35*20*135*1*2=1.2970748526304081859637415192968 35 ...

  3. 3D游戏编程 作业五 枪打恶鬼(打飞碟)

    前言 这次的作业个人感觉挺好玩的,我给做成了射击游戏.同时我也在其中学到了unity的一些有趣应用, 下面先把大的框架给讲一下,然后再着重讲一下我个人的收获吧. Asset文件:github 参考博客 ...

  4. 坦克大战JAVA版(全码)

    游戏运行图片 源码分两大块: java类和resources 其中java中又分了constant.tank.util.window.StartGame(主类):constant里只有Constant ...

  5. html5--canvas--众神眷恋的幻想乡(STG)

    一个小游戏,也花了点功夫,稍微记录一下过程,也可以理解为是对我代码的一个解释.主要用HTML5的canvas的一些API,早就想模仿东方project系列弹幕游戏写一个了,但以前学C/C++时嫌win ...

  6. Udacity机器人软件工程师课程笔记(二)-样本搜索和找回-基于漫游者号模拟器

    Robotics Software engineer编程笔记(二) 5.确定漫游者号的行进方向 (1)漫游者号如何确定自己的行进方向? 我们已经有了一个由前置摄像头得到的图像,然后可以通过对图像进行处 ...

  7. Udacity机器人软件工程师课程笔记(一)-样本搜索和找回-基于漫游者号模拟器

    Robotics Software engineer编程笔记(一) 使用Udacity提供的漫游者号模拟器创建环境地图,寻找样本. 该项目是根据美国国家航空航天局(NASA)的样本返回挑战进行建模的. ...

  8. Unity3D常用代码总结

    1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"I'm a Label"); //1 GUI.Box(Rect(1,2 ...

  9. ElasticSearch大数据分布式弹性搜索引擎使用

    阅读目录: 背景 安装 查找.下载rpm包 .执行rpm包安装 配置elasticsearch专属账户和组 设置elasticsearch文件所有者 切换到elasticsearch专属账户测试能否成 ...

最新文章

  1. 2018-3-25论文(Grey Wolf Optimizer)自然界狼群的生活等级
  2. oracle中怎么查看存储过程的源码
  3. nova-scheduler详解 openstack-ice版
  4. 解决 .htaccess 导致的403禁止访问
  5. 智能机器人服务广州春运
  6. 《改善java代码》第一章:java开发通用原则
  7. AndroidOkhttp3上传单个文件
  8. 【OpenCV 例程200篇】43. 图像的灰度变换(对数变换)
  9. android显示view在屏幕中间,android – 如何在屏幕中央显示imageview?
  10. cad统计多线段总长度插件_新手入门,学习CAD必须掌握,教你使用标注命令,绘图效率翻一倍...
  11. 打印机显示正在未连接服务器,打印机状态未联机是怎么回事
  12. flink-metric原理与实战
  13. Matlab 图像处理
  14. 计算机专业的求职信英文版带翻译,[求职信英语作文带翻译]求职信的英语作文4篇...
  15. Windows快速添加开机启动项
  16. _weak typeof(self) weakSelf = self;
  17. WeX5 BeX5 页面框架核心之数据绑定2021-11-15
  18. 非官方谷歌地图 iOS 应用遭苹果下架
  19. 个人计算机和家用计算机的区别,量子计算机和普通计算机的区别
  20. DSP SMBus总线通信

热门文章

  1. python中当地时间_R 与 Python 中与时间相关内容的梳理
  2. python 读取sqlite存入文件_如何通过python读取sqlite数据文件
  3. Bash脚本教程之set命令
  4. float在python中的书写形式错误的是_在Python3.7.1中,编写简单的GAN时,“TypeError:”float“对象不能解释为整数”错误...
  5. 4固定在底部_礼堂椅厂家教你如何固定座椅
  6. CSS学习笔记3:选择器及优先级
  7. 两天学会css基础(一)
  8. iview给radio按钮组件加点击事件
  9. placeholder的使用
  10. string 大小写转换