最后一次异常法

最后一次异常法

  如果我们在脱壳的过程中发现目标程序产生大量异常的话,就可以使用最后一次异常法,我们来看一个例子,名字叫做”bitarts_evaluations.c”。

我们还是使用Patch过的OD来加载它,并且配置好反反调试插件。

然后将EXCEPTIONS菜单项中的忽略各个异常的选项都勾选上,运行起来。

我们可以看到程序运行起来了,我们单击工具栏中L按钮打开日志窗口。

这里我们可以看到产生了好几处异常,但是都不是位于第一个区段,说明这些异常不是在原程序运行期间发生的,是在壳的解密例程执行期间产生的异常,最后一次是46e88f处的这个异常。

好,现在我们重新启动OD,将EXCEPTIONS菜单项中忽略的异常选项的对勾都去掉,仅保留Ignore memory access violations in KERNEL32这个选项的对勾。

我们运行起来,产生异常断了下来,我们直接按SHIFT + F9忽略异常继续运行。直到停在了46E88F处为止。

这里不是,我们按SHIFT + F9忽略异常继续运行,我们知道最后一次异常是46E88F处的INT 3指令引发的。

这里是壳的解密例程执行过程中产生的最后一次异常,接着就是执行原程序的代码了。

接着我们可以对代码段设置内存访问断点,可能有人会问,为什么不在一开始设置内存访问断点呢?原因是很多壳会检测程序在开始时是否自身被设置内存访问断点,如果执行到了最后一次异常处的话,很可能已经绕过了壳的检测时机。

时间: 2024-08-30 01:41:16

最后一次异常法的相关文章

学习:脱壳之异常法寻找OEP

一个练手unpackme bitarts 1.直接载入OD,这里记录一种脱壳方法,F9运行程序,查看记录窗口,发现有许多异常处 2.这里需要注意的是红标处,这是最后一个异常,其实这次也可以直接在内存窗口中的代码段(或者是利用排除法)直接下内存断点,然后F9运行,等待对程序的代码段(或者其他)的进行访问/写入的时候下断,这里我们使用的是shark恒老师教的异常法来进行学习.... 3.然后将OD的调式选项进行关闭,然后进行手动运行,手动忽视异常,来到上面图中所标出的最有一个int3的地址0046E

1.7.3能停止的线程-异常法

测试如下 1 package com.cky.thread; 2 3 /** 4 * Created by edison on 2017/12/3. 5 */ 6 public class MyThread12 extends Thread{ 7 @Override 8 public void run() { 9 super.run(); 10 for (int i = 0; i < 50000; i++) { 11 if (Thread.interrupted()) { 12 System.o

多线程编程核心技术总结(读周志明书籍的总结)

多线程编程核心技术总结 1.Java多线程基本技能 1.1进程和线程的概念: 进程是独立的程序,线程是在进程中独立运行的子任务. 1.2使用多线程 1.2.1实现方法:继承Thread类,重写Runnable接口. 1.2.2线程安全问题:并发修改公共的实例变量,i++,i-- 1.3线程Thread类的一些方法: currentThread() 放回代码段正在被那个线程调用 isAlive() 判断线程是否处于活动状态 sleep() 使得当前线程退出CPU片段,等待获取锁 1.4停止线程 1

简单脱壳教程笔记(9) --- 手脱TELock0.98b1壳

本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 TELock 操作 1.最后一次异常法 1.选项--->调试设置--->异常------取消所有异常. 在OD插件--StrongOD--Options--Skip Some Exceptions选项取消,重启OD再试试. 2.然后将程序重新载入 3.按shift+f9 ,发现17次shift+f9 就会让程序

java多线程学习笔记——简单

进程:程序(任务)的执行过程——动态性. 持有资源(共享内存,共享文件)和线程. 线程:线程是系统中最小的执行单元,统一进程中有多个线程,线程共享进程的资源. 线程交互:互斥与同步. 注意:多线程是异步的,所以千万不要把Eclipse里代码的顺序当成线程执行的顺序,线程被调用的时机是随机的. java对线程的支持: class Thread    interface Runnable    共同的run方法 线程的创建和启动: 线程常用方法: 如何停止线程: java中有三种方法可以终止正在运行

java多线程技能

1.进程和线程的定义 进程:受操作系统管理的基本运行单元 线程:进程中独立运行的子任务 2.使用多线程 2.1继承Thread类:自定义线程类并继承Thread类,并且重写run方法. class MyThread extends Thread { private int count=1000; @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<500;i++){ count--; Sys

二、java多线程编程核心技术之(笔记)——如何停止线程?

1.异常法 public class MyThread extends Thread { @Override public void run() { super.run(); try { for (int i = 0; i < 5000000; i++) { if(this.interrupted()){ System.out.println("我要停止了....."); throw new InterruptedException(); \\抛出异常 } System.out.

《C#数据结构和算法》-排序

7.7 各种排序方法的比较与讨论 排序在计算机程序设计中非常重要,上面介绍的各种排序方法各有优缺点, 适用的场合也各不相同.在选择排序方法时应考虑的因素有: ( 1)待排序记录的数目 n 的大小: ( 2)记录本身除关键码外的其它信息量的大小: ( 3)关键码的情况: ( 4)对排序稳定性的要求: ( 5)语言工具的条件,辅助空间的大小等. 综合考虑以上因素,可以得出如下结论: ( 1)若排序记录的数目 n 较小(如 n≤50)时,可采用直接插入排序或简 单选择排序.由于直接插入排序所需的记录移

多线程一些简单的基础

一.进程:进程是受操作系统管理的基本运行单位: 二.线程:在进程中独立运行的子任务: 三.多线程的好处: 可以在同一时间内运行更多不同种类的任务: 单任务的特点是排队执行,也就是同步,CPU利用率很低: 多任务的特点也就是多线程,同时执行,异步操作,CPU快速切换,提高利用率: 四.Java里面的多线程基础 1.实现多线程的两种方式,继承Thread类,实现Runnable接口,一般最好实现Runnable接口,因为Java是单继承机制,如果继承Thread类,就不能继承其他类,会给程序带来很大