文档章节

crackme6算法分析记录

enimey
 enimey
发布于 2014/03/22 11:15
字数 423
阅读 147
收藏 1
点赞 0
评论 0

记录一次非明文的crackme分析记录,和注册机的编写。

下载地址:http://pan.baidu.com/s/1ntNTCBv

软件界面如下:

image

软件是加壳了的,脱壳很简单就不写了。

直接od载入,下断点bp GetDlgItemTextA,f9运行,输入Name:eni,Serial:T1,点击check,直接贴注释:

image

在关键call,f7跟进:

image

image

image

image

s2 = T294-96

关键call,f7跟进:

image

用java写的注册机算法:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class main {
	//private static char[] table = new char[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','S','Y','Z'};
	private static String table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	public static void main(String[] args) {
		String name = null;
		System.out.println("请输入NAME:长度不大于9,不小于3");
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		try {
			while ((name=br.readLine())!=null) {
				System.out.print(name);
				if(name.length() < 3 || name.length() > 9) {
					System.out.println("NAME长度错误");
				}
				else {
					int name_length = name.length();
					int[] nameint = new int[10];
					int name_sum = 0;
				
					for(int i = 0; i < name_length; ++i) {
						nameint[i] = (int)(name.charAt(i));
						name_sum += nameint[i]; 
						System.out.println(" " + nameint[i]);
						System.out.println("sum: " + name_sum);
					}
				
					int n = 0, zimu = 0;
					String s1 = "", s2 = "", s3 = "";
					int eax = 0, ebx = 0, ecx = 0, edx = 0, esi = 0, edi = 0;
					for(int i = 0; i < name_length; ++i) {
						n = i*4 -(i+1);
						if(n < 0)
							zimu = 0;
						else
							zimu = (int)(table.charAt(n));
						System.out.println("zimu" + zimu);
						edx = nameint[i] ^ zimu;
						esi = (name_sum * i - name_sum) ^ 0xffffffff;
						esi = edx + esi + 0x14d;
						ecx = nameint[i] * name_length * (i + 3);
						eax = esi + ecx;
						edx = (eax % 0xa) + 0x30;
						eax = (edx ^ 0xadac) * (i + 2);
						edx = eax % 0xa + 0x30;
						s1 = s1 + String.valueOf(edx - 48);
						System.out.println("s1: " + s1);
						//s1 = (((((nameint[i] ^ zimu + ((name_sum * i -name_sum) ^ 0xffffffff) + 0x14d + nameint[i] * name_length * (i + 3)) % 0xa + 0x30) ^ 0xadac) * (i + 2)) % 0xa) + 0x30;
						//s1 = ((((nameint[i] ^ zimu + (name_sum * i - name_sum) ^ 0xffffffff + 0x14d + nameint[i] * name_length * (i + 3)) % 0xa + 0x30) ^ 0xadac) * (i + 2)) % 0xa + 0x30;
					
					}
					eax = name_length * name_sum;
					edi = eax % 0x64 + 0x30;
					s2 = "T" + s1 + "-" + String.valueOf(edi);
					ebx = s2.length();
					for(int i = 1; i < ebx; i++) {
						edi = ((int)s2.charAt(i) ^ 0x20) % 0xa + 0x30;
						s3 = s3 + String.valueOf(edi -48);
					}
					s3 = "T" + s3;
					System.out.println("Serial: " + s3); //最终注册码
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

© 著作权归作者所有

共有 人打赏支持
enimey
粉丝 15
博文 18
码字总数 12299
作品 0
成都
Mahout安装与配置笔记

一、硬件环境 操作系统:Linux ubuntu-13.04-desktop-i386 jdk安装版本:jdk-7u51-linux-i586 Hadoop版本:Hadoop-1.1.1(一个Namenode,三个Datanode部署) 二、安装步骤 在Mahout安装之前读...

kartik ⋅ 2014/06/01 ⋅ 0

MySQL的JOIN(二):JOIN原理

表连接算法 Nested Loop Join(NLJ)算法: 首先介绍一种基础算法:NLJ,嵌套循环算法。循环外层是驱动表,循坏内层是被驱动表。驱动表会驱动被驱动表进行连接操作。首先驱动表找到第一条记录...

文文1 ⋅ 04/01 ⋅ 0

冒泡排序(Bubble Sort)

1、定义 冒泡排序(Bubble Sort)是一种交换排序。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 2、基本思想 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行...

野渡书生 ⋅ 2016/04/29 ⋅ 0

算法导论第二章小试牛刀

Author: bakari   Date: 2015.9.11 《算法导论》真是一本让人又爱又恨的书,爱自然是因为它精简凝练的算法呈现,读来让人欲罢不能;至于恨,是因为它在进行算法分析的时候所体现的数学思想...

chambai ⋅ 2015/09/11 ⋅ 0

机器学习算法——使用 Apriori 算法进行关联分析

参考博客:点击打开链接,点击打开链接 1、什么是关联分析? 关联分析是一种在大规模数据集中寻找有趣关系的任务,这些关系可以有两种形式:频繁项集或者关联规则。 频繁项集(frequent item...

qq_20840025 ⋅ 04/16 ⋅ 0

180302 逆向-抵御静态分析(1)

1625-5 王子昂 总结《2018年3月2日》 【连续第517天总结】 A. 抵御静态分析(1) B. 静态分析是逆向工程中常用的手段。 因此抵御静态分析也是一个很值得深入的话题。 花指令 在反汇编的过程中...

whklhhhh ⋅ 03/22 ⋅ 0

【机器学习实战】 使用Apriori算法进行关联分析

转载请注明作者和出处: https://blog.csdn.net/weixin37392582 代码地址: https://gitee.com/wuweijun 开发平台: Win10 + Python3.6 + Anaconda3 编  者: 无尾 一、前言 一、前言   ...

weixin_37392582 ⋅ 03/27 ⋅ 0

直接选择排序(Straight Selection Sort)

1、定义 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法有直接选择排序...

野渡书生 ⋅ 2016/05/03 ⋅ 0

java数据结构之排序--> 插入排序算法

直接插入排序(Straight Insertion Sort)是一种简单的;排序方法,基本思想是每趟将一条待排序的记录,按其关键字值的大小插入到前面已经排好序列的记录之中的适当位置直到全部记录插入完为...

狂奔啦蜗牛 ⋅ 2012/08/19 ⋅ 0

Top K算法详细解析---百度面试

者:码农 问题描述: 这是在网上找到的一道百度的面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查...

天天顺利 ⋅ 05/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部