菜鸟学算法<一>知识准备篇

刚刚上任,急着给兄弟们一点见面礼,嘿嘿

前言:论坛上有关算法分析的文章不少,也不少精品
但对于刚学CARACK来说,只是叹为观止
原因如下:
1.论坛高手如云,菜鸟也不占少数,有些甚至对汇编指令还不是很熟悉
2.不少算法分析文章分析的是相当完美了,但是作者仅仅展示给的是最终的成果,而没有把分析的思路,分析的过程展示给我们

相信更多的兄弟需要的是一种分析思想,分析理念!
本文(本系列)将对这些问题展开逐一讨论
第一篇:必要基础知识
第二篇:软件注册流程
第三篇:算法分析实例

声明:
1.以下内容都是个人在学习中的一些心得体会,写给新手的,高手飘过
2.文章难免有疏漏之处,欢迎各位兄弟批评指正
3.本文原创于UnPaKcN,如转载,请保持文章完整性

==文章结构==

1.ASCii表(基础)

2.对特殊汇编指令讲解(推荐)

3.定位程序注册代码段

一、ASCII表

◇数 字类:
数    字  0  1  2  3  4  5  6  7  8  9  
十六进制  30 31 32 33 34 35 36 37 38 39
十  进制  48 49 50 51 52 53 54 55 56 57

◇大写字母:
字    母  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  
十六进制  41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A
十  进制  65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

◇小写字母:
小写字母  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
十六进制  61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A
十  进制  97 98 99 100101102103104105106107108109110111112113114115116117118119120121122

◇特殊字符:
字    符     !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  :  ;  <  =  >  ?  @  [  \  ]  ^  _  `  {  |  }  ~
十六进制  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 3A 3B 3C 3D 3E 3F 40 5B 5C 5D 5E 5F 60 7B 7C 7D 7E
十  进制  32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 58 59 60 61 62 63 64 91 92 93 94 95 96123124125126

=>记忆技巧<=

数    字:'0'~'9' -> 30~39
大写字母:'A'~'Z' -> 41~5A
小写字母:'a'~'z' -> 61~7A

特别字符:空  格' '  -> 20
         连字符'-'  -> 2D
备注:连字符在序列号中经常用到,应熟记

■对字符的ASCII值一定要熟悉,深入分析非密码学算法的关键
很多算法是在字符的ASCII值上"做文章"的

#举个典型的例子
算法描述如下:
->取用户名每个字符的ASCII值,累加以后做为序列号
示例代码
004B32BB  |>  8B4D F0       /mov     ecx, dword ptr [ebp-10]         ;  ASCII "[email]prc2.0ultrain@163.com[/email]"
004B32BE  |.  8A0C01        |mov     cl, byte ptr [ecx+eax]          ;  字符串的第i个字符
004B32C1  |.  81E1 FF000000 |and     ecx, 0FF                        ;  取cl
004B32C7  |.  0FAFC8        |imul    ecx, eax                        ;  ECX = ECX * EAX
004B32CA  |.  03F9          |add     edi, ecx                        ;  EDI = EDI + ECX
004B32CC  |.  40            |inc     eax                             ;  EAX++
004B32CD  |.  4A            |dec     edx                             ;  EDX--
004B32CE  |.^ 75 EB         \jnz     short 004B32BB                  ;  循环length(string)次

■大写小写转化

大写 -> 小写: 加20H
小写 -> 大写: 减20H

■另外,还要对一下知识有一定了解

1.数值的十进制和16进制转化
2.字符直接变数字
3.数字直接变字符
4....

二、汇编指令

1.数据传送(Data transfer)
2.算术运算(Arithmetic)
3.逻辑运算和移位指令(Logic& Shift)
4.串操作(String manipulation)
5.控制转移(Control Transfer)
6.处理器控制(Processor Control)

具体查阅8086系统指令手册

常用指令特别讲解

●指令MOV作用:
1.完成寄存器与寄存器、寄存器与内存之间数据传递
2.完成标志位、密码表等的初始化
  其中密码表一般为内存地址
      标志位一般为寄存器,少量是内存地址

●关于堆栈的指令
1.压栈
  ESP的值要减少
2.出栈
  ESP的值要增加
跟踪堆栈的时候,不同的ESP格式的内存地址指向同一内存地址

建议尽量不要在内存地址是ESP格式的情况下锁定跟踪

●目的地址传送指令LEA
作用主要有两个
1.装载有效地址
  指令示例:
      mov     eax, dword ptr [esi+XX]          ;  
      lea     ebx, dword ptr [esi+XX]          ;  
  经过跟踪发现[esi+XX]存放的是某字符串
 那么EBX保存的是该字符串的地址

2.完成算术运算
      lea     eax, dword ptr [edi+XX]          ;
      等价于:EAX = EDI + XX;

●算术运算指令
求反:NEC
主要理解其用法:以 0 减之
往往和OR一起结合,完成对字符串长度的取值

乘法MUL
MUL ECX
运算:EAX = EAX * ECX

除法DIV
DIV ECX
运算:EAX = EAX / ECX
     EDX = EAX % ECX

●逻辑运算指令

"与"运算&

"或"运算^

"异或"运算|

以上三条指令常用作算法运算
做注册机时候分析起来比较头痛

"测试"test
操作,进行异或运算
特点:
(1).不保存异或结果
(2).常和条件跳转指令结合在一起

测试一般有三个方向
1.对标志位值进行测试
格式如下
test EAX,EAX
je/jne xxxxxxxx

2.对某位进行测试
test EAX,4
je/jne xxxxxxxx

对倒数第三位进行测试

3.进行奇偶测试
test EAX,80000001
je/jne xxxxxxxx

●移位指令
左移->乘
SHL  EAX,2
等价于EAX = EAX * (2^2)

右移->除
SHR  EAX,3
等价于EAX = EAX / (2^3)

三、定位程序注册代码段

1.试注册,判断保护方式 
序列号(变相的序列号)
所谓变相的序列号就是程序没有输入注册码的地方,但会以文本文件方式通过读取特定的文件
如keyfile等
这类仍可以归类为序列号保护方式

2.查壳/脱壳
有壳脱之
无壳进行下一步

3.定位程序注册代码段

(1)超级字符串定位
A.有错误提示"invalid regcode!"

B.没有错误提示,但有正确提示"Thank you,..."

C.[unregistered]

(2)通过API断点

A.有对话框
   bp MessageBoxA(W)

B.没有对话框
   bp GetWindowTextA(W)
   bp GetDlgItemTextA(W)

C.重启验证
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W)

(3)其它
对付不同语言的工具选择
DEDE:确定delphi的按钮动作对应的代码

VB:SmartCheck
注意:必须是明码比较的VB程序

4.方法的选择
选择流程如下
字符串->对话框->文本->其它

调试还很依赖经验和运气,暂时无思路的程序可以先放放
有时候可以根据软件注册对话框样式猜出大致用什么思路定位,甚至可以猜到它的加密算法

5.AntiDbg
"高级话题",暂时回避{偶暂时对这方面涉猎太少}o(n_n)o

暂时先告一段落,希望能对论坛的兄弟们有所帮助~~

转载于:https://blog.51cto.com/cracker/114842

菜鸟学算法一基础知识篇相关推荐

  1. 【ESP8266教程】零基础入门学用物联网-基础知识篇(太极创客团队)学习笔记

    前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容, ...

  2. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  3. 超详细的Java面试题总结(二)之Java基础知识篇

    系列文章: 超详细的Java面试题总结(一)之Java基本知识 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java面试题总 ...

  4. 测试岗位面试前复习之【测试基础知识篇】

    测试基础知识篇 一.app测试相关 1.android与ios的app测试的区别: 2.app测试和web测试的重点: 3.性能测试考量的指标: 4.app的性能测试,需要重点关注哪些方面? 5.站在 ...

  5. python独立网站教程_python从零到独立建设网站系列教程之基础知识篇(二)

    python从零到独立建设网站系列教程之基础知识篇(二)python的安装在Windows上安装python点击Download链接 然后就是按导航走点击确认,需要注意的是要把python加入到系统变 ...

  6. 秋招准备-基础知识篇(正更)

    秋招准备-基础知识篇 深度学习 介绍优化器以及如何优化.包括SGD, Momentum,Adagrad,RMSProp,Adam. 欠拟合和过拟合.解决方法. 损失函数.BCE loss和softma ...

  7. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  8. 机器学习算法的基础知识

    机器学习算法的基础知识 1.评估指标 2.偏差与方差(过拟合与欠拟合) 3.正则化(解决过拟合) 4.梯度下降算法(算法优化方式) 5.数据不平衡 1.评估指标 预测值 0 1 实际 0 TN FP ...

  9. 计算机基础知识题库选择题,计算机基础知识篇选择题库

    计算机基础知识篇选择题库 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 计算机基础知识篇选择题库1.微型计算机的性能指标不包括___ ...

最新文章

  1. LeetCode简单题之两数之和 IV - 输入 BST
  2. html点击屏幕向右移动,HTML – 一旦打开,如何使移动页面适合屏幕?
  3. websocketpp 只发送一次
  4. 使用OpenTelemetry搭配Zipkin构建NetCore分布式链路跟踪 | WebAPI + gRPC
  5. 遍历文件夹还原数据库SQL语句
  6. mysql解压包安装linuex_CentOS下安装Apache,php,Mysql
  7. c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
  8. SQL Server警报解决性能问题:如何创建和使用SQL Server警报
  9. Python 爬虫 ——html 页面的认识
  10. C语言实现密码字典生成器
  11. shopnc route.php,shopnc自动结算的问题
  12. 使用地图编辑器构建游戏场景
  13. 数字图像处理(1)——认识数字图像
  14. 为什么我不看好人人网在美国上市
  15. Mixly16:震动报警器
  16. 观点丨区块链未来这一年
  17. 30秒破解所有密码(转载小木虫)
  18. excel查找重复身份证号码
  19. python性能分析工具总结
  20. 处理安卓启动图片变形问题,用一张正方形9.png图片搞定安卓启动页

热门文章

  1. 爱立信:SDN/NFV助力面向5G以及工业互联网的ICT转型
  2. 编译安装LAMP之配置httpd以FastCGI方式与php整合
  3. MySql常用命令总结[转]
  4. 你不需要jQuery(四)
  5. 查看apache、linux、kernel、nginx等版本
  6. Open Cascade DataExchange DXF
  7. 体绘制(Volume Rendering)概述介绍
  8. j2recover----最强大的jfs2文件恢复工具
  9. 本科理工男如何学习Linux
  10. 带限制条件的最大子矩阵 - 牛客