精华内容
下载资源
问答
  • 再次只给出一个软件动态分析方法和流程的大概描述,如果大家对某个工具或者方法感兴趣,度娘走你!(其实很多博客都有,讲的真心好……)1. 动态程序分析(Dynamic Program Analysis)动态程序分析:根据程序的一...

    emm……这节主要说的各个插件等应用,不会给出详细说明,因为如果每个都要说的话肝真的疼。再次只给出一个软件动态分析的方法和流程的大概描述,如果大家对某个工具或者方法感兴趣,度娘走你!(其实很多博客都有,讲的真心好……)


    1. 动态程序分析(Dynamic Program Analysis)

    动态程序分析:根据程序的一次或多次执行的过程与结果,分析代码在时空性能方面所展现的性质。

    为了使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为。通过分析代码覆盖度,确认动态分析是否已经足够。并且要尽可能小的影响程序原本的执行,否则性能测量不准确。



    2.程序分析的概念与方法(Program Profiling:Concepts and Approaches)

    输出分析器主要功能:

    1. 观察到的程序执行事件的统计结果。
    2. 事件流
    3. 实时或周期性的获取/展示程序运行过程中的数据

    分析方法:

    1. 代码注入/插入(insertion/instrumentation):在原始代码中加入某些语句来收集运行时数据,这些语句不改变原程序的语义,但对原程序的性能有轻微的变化。
      优点:准确
      缺点:需要修改源程序,注入的代码可能会影响测试结果
    2. 采样(sampling):以特定频率观察程序执行的特定时刻所展现出的行为与状态。
      外部观察者(VM)周期性监控被测程序,存储各个时刻的快照。基于收集到的数据,分析程序当时所处的状态,分析性能。
      优点:不需要修改程序
      缺点:需要在采样频率与准确度之间折中,可能漏掉小的方法;难以监控内存的使用情况。
    3. 借助虚拟机获取程序性能数据。
      利用虚拟机进行性能监控,所有JVM执行的指令都被记录下来。
      优点:非常准确,可监控时空两方面的性能。
      缺点:与VM绑定,不同的VM提供不同的测量工具。


    3. Java中的程序分析工具

    主要有以下几种:

    1. Command-line tools(in JDK)
    2. JConsole (in JDK)
    3. VisualVM (in JDK)
    4. Eclipse Memory Analyzer(MAT)


    命令行工具

    (下面是使用时的截图,有兴趣可以了解一下)

    • jstat:获取JVM的堆使用和GC性能统计数据

    • jmap:输出内存中的对象分布情况


    • jhat:导出deap dump,浏览/查询其中的对象分布情况。(很有意思的一款工具,也不需要下载,就在JDK中,挺好玩的2333,不过OQL确实啊……)

      没错,下面你看到的是OQL栗子,他真的是一种语言……

    • jstack:获取Java线程的stack trace。
      主要用途:有两个,一是定位线程长时间停顿的原因,如多线程间的死锁、死循环、请求外部资源导致的长时间等待等。二是线程中出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。


    Jconsole

    JConsole是一个GUI监控工具,它使用JVM上的广泛的工具来提供关于运行在Java平台上的应用程序的性能和资源消耗的信息。




    Visual VM

    功能很强大的一款工具,在eclipse上IDEA上都有插件,而且还有中文版!!!(虽然现在中文版的一部分功能已经不兼容了,不过这不重要!)

    它能看很多信息,GC情况,内存情况,CPU性能、各个线程等等信息都能看到,功能非常非常强大,而且还有GUI,做的还非常出色,强烈建议大家下一个看看。

    非常强大,仅截了几个图,感觉基本上所有的功能它……都能干!







    eclipse内存分析(MAT)

    内存堆导出文件的分析工具。再找内存泄漏等非常有帮助!








    AHhh……偷了好多懒,用了好多截图,其实也不算吧,这种工具使用真的没有办法讲,要么长篇大论(真的肝疼),要么就自己实践去弄懂,这些工具网上都有详细的教程,大家感兴趣可以去搜一下,然后下一个试试看,真的非常有帮助,尤其是后两个!(哇……给自己的懒惰找了好冠冕堂皇的理由呀2333,溜了溜了……)



    展开全文
  • 晶体管基本放大电路的分析包括***静态分析和动态分析***。分析放大电路时,必须根据***先静态、后动态的原则***。放大电路的静态分析用放大电路的直流通路来分析。具体的分析方法有***计算法和图解法***。 放大电路...

    1、基本放大电路的分析方法
    晶体管基本放大电路的分析包括***静态分析和动态分析***。分析放大电路时,必须根据***先静态、后动态的原则***。放大电路的静态分析用放大电路的直流通路来分析。具体的分析方法有***计算法和图解法***。
    放大电路的动态分析用放大电路的交流通路来分析。具体的分析方法有图解法和微变等效电路法由于晶体管的特性曲线是非线性的,不能用数学表达式来描述,只能用特性曲线来表示。在分析放大电路时可采用图解的方法。
    在放大电路的输入回路,可以用晶体管的输入特性曲线和直流通路的输入回路方程式来描述。
    在放大电路的输出回路,可以用晶体管的输出特性曲线和直流通路的输出回路方程式来描述。
    2、图解法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3、共射放大电路的动态图解分析
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4、输出波形失真分析
    由晶体管特性曲线的非线性引起的输出信号失真,称为非线性失真,主要有饱和失真和截止失真。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5、放大电路的最大不失真输出幅度
    在这里插入图片描述
    6、输出功率和功率三角形
    在这里插入图片描述

    展开全文
  • 分压偏置共射放大电路的动态分析 首先获得交流通路,将交流通路中的三极管替换成 h 参数等效模型就可得到微变等效电路。 输入电阻由于RB1和RB2通常远远大于rbe,所以约等于rbe。 RB1和RB2串联分压确定基极电位VB,...

    温度变化、三极管老化、电源电压波动等外部因素的影响下,将引起静态工作点的变动,严重时将使放大电路不能正常工作,其中影响最大的是温度的变化

    在这里插入图片描述
    这样一个共射放大电路,从晶体管内部电流的分配关系上,知道上式。基于他的直流通路,我们知道 IB 等于UCC减去UBE 比上RB。在这个式子里,电源电压UCC和电阻RB 都是性能比较稳定的器件,可以认为在温度变化的时候,两个参数不会出现变化。而其他另外三个参数,β、UBE和 ICBO 都是对温度敏感的参数,

    ★ 温度对UBE、β 和 ICBO 的影响的影响

    温度的升高,会使得输入特性曲线,向左移动。也就是温度每升高一摄氏度,温度每升高 1度,UBE将减小 -(2~2.5)mV。温度每升高一摄氏度,β 就将增大0.5%-1%。这就意味着当温度升高的时候,输出特性曲线会向上移动,同时间距会拉大。而由于ICBO是由少子漂移产生的反向电流,因此它的温度就更加敏感了。温度每增加十摄氏度。ICBO就像增大一倍。由此可见,当温度升高的时候UBE 会下降,β 和ICBO会增大。这样的变化带入IC 的表达式,就会发现,当温度升高的时候,客观产生的现象是IC 将会增大。而这反映在我们的特性曲线上就可以发现,当温度升高的时候,静态工作点将会随着特性曲线的向上移动,而沿着负载线上移

    稳定静态工作点的途径

    (1)从元件入手
    选择温度性能好的元件;
    经过一定的工艺处理以稳定元件的参数,防止器件老化。

    (2)从环境入手
    采用恒温措施

    (3)从电路改进入手
    采用温度补偿
    引入反馈

    稳定静态工作点的典型电路及其原理

    稳定静态工作点的思路就是在温度升高的时候减小 IB 从而把本应升高的 IC 再降下来。

    (1)二极管温度补偿电路

    在这里插入图片描述
    在固定偏置电路中,基于基尔霍夫电流定律,在基极RB 节点上进行分流,就可以达到减小 Ib 的效果。基于此可以利用同样对温度敏感的元件。例如,二极管来构成温度补偿电路。此时基于基尔霍夫电流定律,IRb = IR+ IB 。而由于固定偏置电路的 IRb 基本确定,当温度升高的时候在引起 IC 增大的同时,根据二极管的特性分析,温度升高会导致二极管的反向电流 IR 增大,由于IRB 固定不变,IB 自然就会减小,而 IC 等于βIB 将本应升高的 IC 降下来,保持了静态工作点的稳定。

    (2) 直流负反馈Q点稳定电路

    在这里插入图片描述
    在这里插入图片描述
    此时IB 不在是与温度无关的量,由于β 的出现,使得当温度升高的时候,IC 变大的同时,β 也会增大,就会导致 IB 减小,从而将本应升高的 IC 降下来,起到了稳定静态工作点的效果。

    在此过程中,Re 是关键,正是Re 响应了 IC 的变化,在 IC 增大的时候抬高了射极电位Ve 。减小了IB,达到了稳定静态工作点。在这里插入图片描述
    在这里插入图片描述
    将RB1 和RB2 取代了原来的基极电阻RB,对于电源UCC 来说,RB1 和RB2 是一种串联分压的形式。故此电路就叫做分压偏置共射放大电。如果合理地选择各种器件RB1 和RB2,使得电路中的电流和电压满足 I2 >>IB ,VB >>UBE,I2 也就是RB2 上的电流远远大于基极电流 IB ,而 VB 也就是基极电位远远大于UBE,那么就可以通过VB 点的基尔霍夫电流定律,就可以认为基极这条支路视为开路。基于左边支路的串连分压关系,就可以上图中 基极电位 VB 的表达式。通过此式可以看出VB 都是由电阻、电源确定的,都是与温度无关的比较稳定的元件,所以在这种情况下,温度变化的时候基极电位基本恒定。在此前提下,当温度升高的时候,IC 将会增大。而IC ≈ IE , IE 是RE上的电流,必然导致 RE 上的电压降会增大,也就是会抬高射极电位VE 。由于基极电位VB 是几乎与温度无关的一个固定量,所以VB 减 VE ,也就是UBE 将会出现下降的趋势。从而根据晶体管的特性曲线知道UBE 变小 IB 自然就会变小,从而最后将本应升高的集电极电流 IC 降下来,起到稳定静态工作点的作用。通过此过程可以看到,这个分压偏置稳定静态工作点主要有两方面,一个是通过串联分压稳定了基极电位VB ,而另一个则是有赖于RE 引入的直流负反馈

    (3)引入负反馈和温度补偿稳定Q点

    将以上两种方法结合起来,一起达到稳定静态工作点的目的。例如下图中的两个电路就是采用了二极管和热敏电阻进行温度补偿,同时结合RE 的直流反馈来稳定静态工作点。

    在这里插入图片描述
    这里需要注意的是在这样的二极管的补偿电路中,二极管的连接方式和之前的二极管连接方式是不同的,它在阳极接在基极上。此时利用的是二极管正向特性对温度的敏感性。根据二极管温度特性当温度升高的时候,二极管的正向特性将左移。此意味着二极管的端电压UD 将下降。那这样一来,由于二极管正极节点的电压减小,必然会使得基极电压VB 也变小,同时由于射极电阻RE 的存在,使得温度升高的时候,射极电位VE 将会被抬高 。一增一减,从而使得UBE 变小,UBE 的减小带来 IB 减小,最终使得 IC 减小,稳定静态工作点。

    分压偏置共射放大电路的静态分析

    在这里插入图片描述
    方法一 戴维南等效电路法

    首先可以将输入回路视为一个有源的二光头网络,就可以利用戴维南等效定理将其等效为一个电压源和电阻的串联,根据戴维南定理,这个等效电阻RB 应该是这样一个有源网络中将信号源置0 以后的等效电阻,将VCC 对地短路,就可以知道此时的等效电阻RB 显然是RB1 并上RB2,电源UB是这样一个端口的开路电压,显然是RB1和RB2的对UCC 的串联分压。在这里插入图片描述
    根据输入回路的电压方程,就可以得到唯一的未知数 IBQ 的表达式,进而得到ICQ 和UCEQ 。根据之前结论这个分压偏置之所以能够稳定静态工作点,其中一个重要因素,就是因为基极电位是一个与温度无关的恒定量,我们重点来考察一VB这样一个参数。根据回路的方程,知道VB =UBEQ +(1+β)IB RE ,结合IBQ 的表达式,就可以得出一个非常重要的结论。当(1+β)远远大于RB 的时候,此时VB ≈ UBB ,也就是约等于UCCRB2 /(RB1+RB2。从而满足固定基极电位的需求。因此,这个条件跟上面引入的 I2 >>IB ,VB >>UBE 的条件是等价的。工程上,通常将该关系式作为分压偏置电路的稳定偏置条件,也是选取RB1、 RB2和RE的依据。

    方法二 估算法

    根据我们电路稳定偏置条件,也就是 I2 >>IB ,VB >>UBE,那此时根据VB 节点的基尔霍夫电流定律,基极之路视为开路,在这样一种条件下就可以得到 VB 的表达式,进而在基于RB2、RE支路的电压方程,率先求得 IE 而 IC ≈ IE,反过来,再利用 IC = βIB 的表达式,求出IBQ 最终基于输出回路求取UCEQ 完成静态分析。在这里插入图片描述
    关于RE的讨论

    RE越大,负反馈越强,电路温度稳定性越好
    RE 上的电流就是输出电流IC 。因此RE太大其功率损耗也大
    RE 增大,VE增高,使UCE减小,UCEQ 的位置将会影响最大不失真输出电压,而UCEQ 减小必将导致电路动态范围变窄,减小了最大输出电压幅度。若想在RE 增大的同时任然保持原来的动态范围不变,就必须增大 VCC。因此RE不宜取得太大。在小电流工作状态下, RE可取几百欧到几千欧;大电流工作时, RE为几欧到几十欧。

    分压偏置共射放大电路的动态分析

    首先获得交流通路,将交流通路中的三极管替换成 h 参数等效模型就可得到微变等效电路。在这里插入图片描述
    在这里插入图片描述
    输入电阻由于RB1和RB2通常远远大于rbe,所以约等于rbe

    RB1和RB2串联分压确定基极电位VB,RE引入负反馈稳定静态工作点。

    旁路电容CE 比较大,通常在几十uF左右,在交流作用下可以理想认为他短路。如果没有这个旁电容对放大电路的静态性能没有影响。在这里插入图片描述
    在动态性能方面如果去掉这个旁路电容,RE 就将会出现在微变等效电路中。就会影响放大电路的动态性。首先,看电压放大倍数。方法仍然是相似的,利用 ib 来表示UO 和UI,进而得到电压放大倍数。通过输出回路,可以看到UO 是RC和RL 两个并联电阻上的电压,而两者的总电流就 βib,所以仍然可以得到上图中uo的表达式,再来看看输入电压 ui 。ib 是蓝线支路上的电流,ui 则是上下两点之间的电压降,所以就可以用上图中ui 方程用 ib 来描述 ui,而这部分的电压显然有两部分组成,一部分是 rbe 上的电压降,是rbe ib ,另外一部分则是RE 上的电压降,这里要注意RE上的电流是(1+β)IB,写出表达式就反映了ui 和 ib 的关系。将两者相除,根据定义就可以得到这个电路的电压放大倍数如上图所示。显然,跟前面的固定偏置放大电路的电压放大倍数不一样了,而且通常情况下(1+β)RE 远远大于 rbe ,β 和(1+β)又相差无几。经过变化以后,电压放大倍数就是:Au = - R’L /RE。这意味着,此时的电压放大倍数与晶体管的参数没有多大关系,而只与比较稳定的电阻有关,这就意味着电路放大倍数的稳定性得到了大大的提高。在这里插入图片描述
    输入电阻仍然是输入端口看进去的等效电阻,由于RB1 和RB2 的并联支路的阻值已经确定,故Ri = RB1 // RB2 // R’i 。R’i 仍然是端口电压比上端口电流。他的端口电流就是ib, 而端口电压就是Ui 。而Ui 和iB 上已经得到了ui = ibrbe +(1+β) ib RE 这样的表达式,可推出R’i 的表达式是:R’i = rbe+(1+β)RE 。所以这样一种电路的输入电阻就等于下图中的形式。而输出电阻仍然是可以利用三步走的方法来进行求解。求解后的结论仍然是RC在这里插入图片描述将有旁路电容和没有旁路电容的结果加以对比。可以看到,当电路中存在着旁路电容的时候,放大电路的动态性能与固定偏置放大电路没有区别。当去掉旁边的时候,放大倍数出现了变化,是由于分母中(1+β)RE 的存在,使得电压放大倍数减小了。但同时又使得稳定性大大提高了。在显然去掉了旁路电容以后电路的输入电阻大大地提高了,而输出电阻则保持不变。那为什么一个旁路电容就会对电路的性能产生这么大的影响呢?原因就在于,如果没有这个旁路电容CE ,那么RE 就将引入交流负反馈。必然会对电路的动态性能产生各种影响。在这里插入图片描述
    此时我们可以看到,显然,这样一个旁路电容对电路的性能的影响有好有坏,他在提高了稳定性,增大了Ri 的同时,又损失了电压放大倍数。那么在具体的电路的设计中,可以将电阻RE 一分为二,一部分并上旁路电容,那此时显然对交流性能有影响的只有RE1 。那这就是一个比较常用的分压偏置共射放大电路。就可实现放大倍数不会损失过多,又能够在一定程度上抬高输入电阻。

    在这里插入图片描述
    在实际应用中对于这样一个电路,还应该注意以下一些问题

    1. 为了保证分压偏置放大电路能够稳定静态工作点,应合理选择元件参数,满足
      以下两个条件:I2 >>IB VB >>UBE (实际电路中通常取 I2=10IB VB =3UBE
    2. RE不宜取得太大。在小电流工作状态下,可取几百欧到几千欧
    3. 若要调整分压偏置放大电路的静态工作点,通常的方法是调整上偏置电阻RB1
      10IB VB =3UBE
    4. RE不宜取得太大。在小电流工作状态下,可取几百欧到几千欧
    5. 若要调整分压偏置放大电路的静态工作点,通常的方法是调整上偏置电阻RB1
    6. 若分压偏置放大电路的静态工作点正常,而放大倍数严重下降,应重点检查旁路电容CE是否开路或者失效。
    展开全文
  • 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特...本篇文章将讲解动态分析OllyDbg工具的基础用法,主要是结合两个Crakeme案例逆向破解。希望对初学者有帮助,大神请飘过,谢谢各位看官!

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。上一篇文章分享了IDA Pro反汇编工具的基础用法,并简单讲解一个EXE逆向工程解密实战方法;本篇文章将讲解动态分析OllyDbg工具的基础用法,主要是结合两个Crakeme案例逆向破解。希望对初学者有帮助,大神请飘过,谢谢各位看官!

    下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
    百度网盘:https://pan.baidu.com/s/1dsunH8EmOB_tlHYXXguOeA 提取码:izeb

    PS:作为初学者,深知网络安全这块要学习的知识太多,希望自己能始终保持满腔热情,科研结合实践慢慢前行。

    前文学习:
    [网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
    [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
    [网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
    [网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
    [网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战

    前文欣赏:
    [渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
    [渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
    [渗透&攻防] 三.数据库之差异备份及Caidao利器
    [渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

    参考下面大神的文章,推荐大家阅读:
    《加密与解密》段钢等著
    《OllyDBG入门教程》看雪学院 - CCDebuger
    初练160个CrakeMe程序之002 - 吾爱破解海天一色大神
    160个CrackMe002 - CSDN鬼手大神
    [Crack杰CM破解实战系列] 之AfKayAs.2 - Crack杰大神
    逆向工程实战–Afkayas.1 - epsilon大神


    一.OllyDbg工具简介

    OllyDbg是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。

    OllyDbg打开如下图所示,包括反汇编窗口、寄存器窗口、信息窗口、数据窗口、堆栈窗口。

    • 反汇编窗口:显示被调试程序的反汇编代码,包括地址、HEX数据、反汇编、注释
    • 寄存器窗口:显示当前所选线程的CPU寄存器内容,点击标签可切换显示寄存器的方式
    • 信息窗口:显示反汇编窗口中选中的第一个命令的参数及跳转目标地址、字符等
    • 数据窗口:显示内存或文件的内容,右键菜单可切换显示方式
    • 堆栈窗口:显示当前线程的堆栈

    下图是打开EXE后显示的界面。


    下面简单讲解常用的快捷键调试方式。

    F2
    设置断点,如下图所示的红色位置,程序运行到此处会暂停,再按一次F2键会删除断点。

    F9
    按下这个键运行程序,如果没有设置相应的点,被调试的程序直接开始运行。

    F8
    单步步过,每按一次这个按键,将执行反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。

    F7
    单步步入,功能通单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先停留在子程序的第一条指令上。如下图进入CALL子程序。

    F4
    运行到选定位置,即运行到光标所在位置处暂停。

    CTRL+F9
    执行到返回,按下此键会执行到一个返回指令时暂停,常用于从系统领空返回到我们调试的程序领空。

    ALT+F9
    执行到用户代码,从系统领空快速返回我们调试的程序领空。


    二.OllyDbg分析Crakeme示例1

    第一个案例是 《加密与解密》书中Crakeme v3.0的文件,需要解密用户名和序列号。

    点击“Register now”按钮,会有输入错误相关的提示,如下图所示。

    OllyDbg动态分析的基本流程如下:

    • 通常拿到一个软件先试着运行软件,如果有帮助文档查阅帮助文档,熟悉软件的基本用法,接着尝试输入错误的注册码,观察错误提示。
    • 如果没有输入注册码的地方,要考虑是否是读取注册表或Key文件(程序读取一个文件中的内容判断是否注册),这些可以用其他工具来辅助分析。
    • 如果都不是,原程序只是一个功能不全的试用版,那要注册为正式版需要手动写代码完善。
    • 如果需要输入注册码,如上图所示,则调用查壳软件检查程序是否加壳(如PeiD、FI),有壳的需要脱壳之后再调用OllyDbg分析调试,无壳的直接调用工具调试。

    下面开始正式的分析。

    第一步:调用PEiD检测程序是否加壳。
    反馈结果为“Borland Delphi 4.0 - 5.0”,无壳Delphi编写的文件。

    第二步:运行CrakeMe V3.0文件,并点击“Register now”,提示错误信息。
    对话框提示错误信息“Wrong Serial, try again!”。

    第三步:启动OllyDbg软件,选择菜单“文件”,打开CrackMe3文件。
    此时文件会停留在如下位置,双击注释位置能添加自定义注释。

    第四步:在反汇编窗口右键鼠标,选择“查找”->“所有参考文本字串”。

    弹出如下图所示的对话框。

    第五步:右键选择“查找文本”,输入“Wrong”定位“Wrong Serial, try again!”位置。

    如下图所示,定位到“Wrong Serial”位置。

    第六步:接着右键鼠标,点击“反汇编窗口中跟随”。

    接着定位到如下图所示位置。

    第七步:选中该语句右键“查找参考”-:“选定地址”(快捷键Ctrl+R)。

    弹出如下图所示的“参考页面”。

    第八步:双机上面的两个地址(00440F79、00440F93),去到对应的位置。

    在反汇编窗口中向上滚动窗口,可以看到核心代码:

    第九步:通过查看跳转到“Wrong serial, try again”字符串的指令,可以查询相应的程序。
    在“调试选项”->“CPU”->勾选“显示跳转路径”及“如跳转未实现则显示灰色路径”和“显示跳转到选定命令的路径”。

    如下图所示:

    第十步:详细分析反汇编代码。
    在下图中,地址0040F2C处按下F2键设置断点,接着按F9运行程序。

    输入“Test”和“754-GFX-IER-954”,点击“Register now!”,显示结果如下图所示。

    程序会在断点处停止,同时提示刚才输入的内容。

    输出内容如下所示,其中内存地址02091CE0中输入了刚才的“Test”。

    第十一步:左击“ss:[0019F8FC]=02091CE0,(ASCII “Test”)”,右键选择“数据窗口中跟随数值”,会在数据窗口中看到输入的内容。EAX=00000004 表示输入内容的长度为4个字符。

    第十二步:调用F8按键和F7按键一步步分析代码。
    回到下面00440F2C这部分代码,按下F8一步步运行,注意下面的核心代码。

    00440F2C  |.  8B45 FC       mov eax,[local.1]            ;  输入的内容送到EAX,即"Test"
    00440F2F  |.  BA 14104400   mov edx,crackme3.00441014    ;  ASCII "Registered User"
    00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C       ;  关键点:用按F7进入子程序
    00440F39  |. /75 51         jnz Xcrackme3.00440F8C       ;  调走到这里就错误:Wrong serial
    ...
    

    第十三步:当F8运行到“00440F34 |. E8 F32BFCFF call crackme3.00403B2C”时,按下F7进入CALL子程序,此时光标停留在如下所示位置(00403B2C)。

    这里的PUSH ebx、PUSH esi等都是调用子程序保存堆栈时使用的命令,按F8一步步运行代码。其核心解释如下,是基础的汇编语言:(参考看雪CCDebuger大神的《OllyDBG入门教程》)

    重点:程序运行到如下图所示界面时,可以看到“Test”和“Registered User”的比较。通过上面图片的分析,我们知道用户名必须为“Registered User”。

    第十四步:接着按F9键运行程序,出现错误对话框,点击确定,重新在编辑框中输入“Registered User”,再次点击“Register now!”按钮,分析调试程序。
    注意,F12键为暂停。

    核心代码如下,其中地址00440F34的CALL已经分析清楚,继续F8执行下一步,知道第二个关键地方,即00440F51,按下F7进入子程序。
    注意:注释内容的提示不一定存在,需要动态调试程序到寄存器查看对应的注册码,才是正确的做法。

    00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C
    00440F51  |.  E8 D62BFCFF   call crackme3.00403B2C
    

    上面两句代码可以看到用户名和注册码都是调用同一子程序,这个CALL分析方法和上面一样。

    第十五步:按F8调试该子程序,发现cmp比较两个值是否相等,其中0044102C为注册码内容。

    第十六步:按F12暂停,再按F9重新运行,输入正确的用户名和密码,解密成功。
    Registered User
    GFX-754-IER-954

    难点:调试程序时如何核心代码,比如这里的CMP比较,同时汇编代码也比较晦涩。


    三.OllyDbg分析Crakeme示例2

    这个案例是破解Crakeme中的Afkayas.1.EXE,这是典型的字符串序列破解程序,根据name的值推出serial。

    第一步:通过PEiD检查它无壳,VB编写的。

    第二步:OllyDbg工具打开Afkayas.1.EXE文件如下图所示。

    第三步:反汇编区域右键鼠标,选择“查找”->“所有参考文本字串”。

    第四步:在弹出的对话框中找到失败的提示字符“You Get Wrong”,右键“反汇编窗口中跟随”。

    此时会回到代码区,可以看到失败和成果的字符串。

    第五步:通常成功和失败的反馈字符串相隔不远,需要在之前判断,如果输入的serial正确则成功,否则失败;接着向上找到调用字符串比较函数的入口点。

    注意,这一步比较关键,但个人觉得需要长时间的经验和实践,才能准确定位。

    汇编调用函数之前会先把参数入栈,然后用CALL指令调用函数。在字符串比较函数之前有一句 PUSH EAX 指令,可以推测这里的EAX就是字符串的首地址。

    第六步:在比较函数00402533处按下F2键设置断点,接着按F9键执行,此时会弹出运行界面,我们输入“Eastmount”和“12345678”,然后点击OK按钮。

    此时程序停留在断点处,右下角堆栈区显示了提示的正确Serial。

    第七步:输入正确的用户名和Serial,成果注册。
    Eastmount
    AKA-877848


    下面结合鬼手大神和海天一色大神的博文,简单分析加密的基本逻辑,同时强烈推荐大家阅读他们的文章,参见前面的参考文献。这些逆向的经验真不是一朝一夕就能获取的,深知自己要学习和经历的东西太多,你我一起加油。

    基本流程如下:
    serial = ‘AKA-’ + 逆序itoa(strlen(name) * 0x17CFB + name[0])

    • 求出了用户名的长度
    • 将用户名长度乘以0x17CFB得到结果 如果溢出则跳转
    • 将结果再加上用户名的第一个字符的ASCII
    • 将结果转为十进制
    • 将结果和AKA进行拼接,得到最后的序列号

    下面分享一段Python的解密代码。

    # encoding:  utf-8
    
    key = "AKA"
    name = "Eastmount"
    
    #获取用户名长度
    nameLen = len(name)
    print(u'获取用户名长度:')
    print(nameLen)
    
    #用户名长度乘以0x17CFB得到结果
    res = nameLen * 0x17CFB
    print(u'用户名长度乘以0x17CFB:')
    print(res)
    
    #将结果加上用户名的第一个字符的ASCII
    print(name[0], ord(name[0]))
    res = res + ord(name[0])
    print(u'结果加上用户名第一个字符的ASCII:')
    print(res)
    
    #转换为十进制 省略
    
    #拼接序列号
    key = key + str(res)
    print(u'最终结果:')
    print(key)
    

    定义不同的用户名可以得到对应的Serial。


    四.总结

    写到这里,这篇基础性文章就叙述完毕,网络安全要学习的知识真的很多,涉及面很广,包括汇编、网络、操作系统、加密解密、C/C++、Python等。希望自己能慢慢进步,科研与实践并重,也希望读者喜欢这系列总结笔记。不喜勿喷,与你同行~

    (By:杨秀璋 2019-08-13 周一深夜2点写于贵阳 https://blog.csdn.net/Eastmount )

    展开全文
  • 逆向分析中常用的分析方法有:静态分析动态调试、HOOK等。动态调试的好处是:1)可以在调试的过程中知道参数或者局部变量的值以及变化过程,2)可以快速履清代码运行的先后顺序,验证自己的想法是否正确。安卓中...
  • 算法分析与设计的基本方法 1.递推法 递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。 2.递归 递归指的是一个过程:...
  • 程序动态分析工具调研

    千次阅读 2015-10-19 17:03:05
    综述本文是对程序动态工具的调研,通对各种动态分析工具的原理、功能、优缺点等方面的调研分析来使读者在使用工具时更有针对性。 作为调研,本文并不过多的涉及工具的细节,主要关注点在于工的原理、功能、优缺点...
  • BitBlaze(四) - 动态分析组件TEMU

    千次阅读 2013-05-02 11:20:16
    4 TEMU:动态分析组件 这一部分主要介绍TEMU,BItBlaze平台的动态分析组件,描述其提取操作系统级语义的组件,执行系统全局的动态污点分析,以及它的插件和实现。 4.1 TEMU概述 TEMU是一个基于全系统仿真器QEMU...
  • Inspeckage,安卓动态分析工具

    千次阅读 2017-06-09 12:06:44
    Inspeckage是一个用来动态分析安卓app的xposed模块。Inspeckage对动态分析很多常用的功能进行了汇总并且内建一个webserver。整个分析操作可以在友好的界面环境中进行。可以参考:Inspeckage - Android Package ...
  • 之前的文章大致介绍了一下我们的动态数据竞争检测平台如何构建,这篇文章主要是在动态数据竞争检测平台上实现了之前介绍的数据竞争检测方法,我们扩展了其中的一些方法使得这些方法能够识别所有的Pthread库中的同步...
  • 统计分析方法

    千次阅读 2014-02-13 21:09:15
    统计分析方法:对比分析法、平均和变异分析法、综合评价分析法、结构分析法、平衡分析法、动态分析法、因素分析法、相关分析法等。
  • Android APK 静态分析与动态分析

    千次阅读 2016-10-25 09:52:52
     动态分析是Android沙盘的主要功能,主要使用Google Android模拟器作为沙盘环境,同时以前面修改过的system.img来启动模拟器,以在操作过程中生成我们所需的日志信息:   system(' start emulator -...
  • 动态规划基本思想

    千次阅读 2018-07-04 11:24:38
    动态规划和分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 与分治法不同的是,动态规划法中分解得到的子问题不是互相独立的。若用分治法来解这类...
  • 聚类分析基本概念和方法聚类是一个把数据对象集划分成多个组或簇的过程,使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似。相异性和相似性根据描述对象的属性值评估,涉及到距离度量。10.1 聚类分析...
  • JVM执行方法分析

    万次阅读 2018-11-29 14:42:06
    重载和重写 在java中,如果同一个类出现了多个名称相同,参数也相同的方法,是无法通过编译的。...不考虑基本类型的自动装拆箱和可变长参数的情况下选; 在(1)没找到的话,允许装拆箱但不允许...
  • 我们知道,对于动态污点分析来说,检测所有的信息流动是不可能的。因为污点只沿着实际执行的路径流动,特别地,动态污点分析会漏报一些implicit flows(控制流)。 一个想法是采用动静结合的方法,解决隐式流造成的误...
  • 文章目录1.序2.动态规划的基本概念[^1]3.动态规划算法的基本思想[^2]4....这篇文章主要介绍动态规划算法的基本思想、使用动态规划算法求解问题的基本步骤、动态规划算法的两个基本要素以及一些经典的动态规划问题。...
  • 动态规划(一):动态规划的基本概念和基本方程

    万次阅读 多人点赞 2016-11-12 19:33:37
    参考资料:《运筹学》(第三版) 清华大学出版社 ISBN:978-7-302-10214-4 戳我下载动态规划的应用场景等等就不介绍了,后面会写一些能用动态规划方法解决的常见问题。这一部分基本抄书上到1.1 多阶段决策问题及实例...
  • 模糊聚类分析方法

    万次阅读 多人点赞 2019-05-07 08:33:20
    【1】基本概念: 隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵 【2】模糊模式识别:海明贴近度 、欧几里得贴近度 、黎曼贴近度、 格贴近度、最大隶属原则、择近原则 【3】模糊聚类分析方法:模糊等价矩阵、...
  • 动态加载框架DL的基本结构、原理解析
  • 恶意代码的分析方法:静态分析、动态分析 恶意代码静态分析技术主要包括 :反病毒软件扫描、文件格式识别、字符串提取分析、二进制结构分析、反汇编、反编译、代码结构与逻辑分析、加壳识别和代码脱壳。 反病毒...
  • 白盒测试基本方法

    万次阅读 2015-10-21 23:23:38
    白盒测试作为测试人员常用的一种测试方法,越来越受到测试工程师的重视。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。因为对于不同复杂度的...
  • GIS基本理论系列是在《地理信息系统原理和应用》读书报告基础上完成的,...空间信息分析基本方法包括以下一些内容:(1)空间信息量算:质心计算、几何量算、形态量算等(2)空间信息分类:主成分分析(PCA)、层次分析
  • 数据分析-数据分析方法

    千次阅读 2015-11-17 14:34:49
    数据分析作用与对应的分析方法 对比分析法 1)分类:静态比较和动态比较 静态比较:同一时间条件下对不同总体指标的比较,如不同部门、不同地区、不同国家的比较,也叫横向比较,简称横比。 动态比较:在同一总体...
  • 静态分析方法简介

    千次阅读 2018-02-07 16:24:14
    程序分析分为动态分析和静态分析两种,其中静态分析是指不实际运行程序而通过词法分析、语法分析、控制流、数据流等技术对源码进行扫描分析 本文从宏观上对静态分析技术做一个大体的介绍,并为后续文章做一个好的...
  • 控制系统动态性能分析

    千次阅读 2012-04-01 20:37:36
    控制系统动态性能分析   控制系统动态性能分析   控制系统稳态性能分析   控制系统稳态性能分析     频率特性的基本概念   频率特性的基本概念...
  • 它是50年代首先在连续体力学领域 - 飞机结构静、动态特性分析中应用的一种有效的数值分析方法,随后很快广泛的应用于求解热传导、电磁场、流体力学等连续性问题。 有限元法分析计算的基本思想 (以结构位移法为例) (1...
  • 这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样...
  • 代码分析方法

    千次阅读 2009-11-12 22:08:00
    整个过程是及其富有挑战性和探索性的,回顾这半年多时间的工作和学习,对代码分析方法有一些总结和心得,隧记录下来以备遗忘。这篇文档并非最终文档,在之后的工作和学习过程中会随时补充。 开源时代的来临给程序员...
  • CMake 基本使用方法

    万次阅读 2018-06-12 14:19:35
    下面来分析一下PROJECT_SOURCE_DIR和PROJECT_BINARY_DIR的区别,如果在bplustree /build目录下执行cmake ..命令,那么PROJECT_BINARY_DIR指的的是bplustree /build目录,即执行cmake的当前目录,而PROJECT_SOURCE_DIR...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 409,212
精华内容 163,684
关键字:

动态分析基本方法