文档章节

crackme4算法分析记录

enimey
 enimey
发布于 2014/03/31 13:14
字数 424
阅读 110
收藏 3

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

软件界面如下:

image

验证成功后,返回success!

软件是加壳了的,用esp定律+单步,很容易完成脱壳。

由于是win32控制台程序,和之前的窗口程序稍微有点不同。很明显,我们需要在获取用户输入的api处下断点,用 bpx gets(在所有调用gets函数的地方下断点)下断。

算法很简单,这次我没有仔细用od跟算法,是在od找到算法的地址,然后直接用ida的f5看的伪代码。

直接贴一下注册算法,留以备用:

#coding=gbk
userName = input('请输入用户名(只能输入5位字母):')
mid1Passwd = ''
passwd = ''
index = 0
tuple = (0x76, 0x03, 0x40, 0x70, 0x02, 0x55, 0x5B, 0x5B, 0x05, 0x64)
al = 0
dl = 0
if len(userName) != 5 :
	print('用户名输入错误!')
	exit()
for i in userName :
	if ord(i) <= 96 or ord(i) > 122 :
		if ord(i) > 64 and ord(i) <= 90 :
			mid1Passwd += chr(((ord(i) - 65) * 7 + 13) % 26 + 65)
		else :
			print('用户名输入错误!')
			exit()
	else :
		mid1Passwd += chr(((ord(i) -97) * 7 + 13) % 26 + 65)
print(mid1Passwd)
		
for i in mid1Passwd :
	dl = (((((0x00280000 +ord(i)) * 0x67) & 0x0000ffff) >> 0x8) & 0x000000ff) >> 0x2
	al = ord(i) >> 0x7
	passwd += chr((dl -al + 0x30) ^ tuple[index])
	index += 1
	passwd += chr((ord(i) - (((dl - al) << 0x2) + (dl - al)) * 2 + 0x30) ^ tuple[index])
	index += 1
print('密码为:' + passwd)

PS:虽然算法很简单,但是还是一些小技巧:1,算法并没有在开始检查用户名的长度,而是在后面验证密码时,通过验证的循环次数控制了用户名的长度;2,算法为了不直接将"success"字符串硬编码到程序中,而是采取了将其他乱码形式的字符串以某种算法而生成"success"、“sorry”等提示信息。

© 著作权归作者所有

共有 人打赏支持
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
0
MySQL的JOIN(二):JOIN原理

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

文文1
04/01
0
0
冒泡排序(Bubble Sort)

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

野渡书生
2016/04/29
29
0
算法导论第二章小试牛刀

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

chambai
2015/09/11
0
0
内排序及时间复杂度分析-插入排序&选择排序&交换排序&归并排序&分配和索引排序对比

基本概念 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 给定一个序列 R = { r1, r2, ...,rn } 其排序码分...

tcfellow
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nuc970 uboot nand-boot,kernel, filesystem 烧录位置

一 烧写到Nand Flash **1.1 **相关文件说明 l BSP版本:nuc970bsp-release-20150519.zip l NuWriter版本:2015/04/28-V01,nuvoTon Nu-Writer V1.0 l 烧写文件: u-boot-spl.bin:负责将u-b......

CookieDemo
今天
1
0
python中sort和sorted函数小结

L.sort(cmp=None, key=None, reverse=False) sorted(iterable, cmp=None, key=None, reverse=False) 这样看,sorted函数只比sort函数多一个iterable参数,其余没什么不同,iterable是一个迭代......

上官夏洛特
今天
4
0
thinkphp 常用SQL执行语句总结

第一条:Db::tablera('vr_panomas')->where(['delete_time'=>0,'id'=>['in',$pids]])->field(['id'=>'id','post_thumb'=>'thumb','post_title'=>'title','post_tags'=>'tags','post_price'=>......

koothon
今天
6
0
支付宝返回状态resultStatus意思

上一篇集成支付宝的时候,会有一些支付宝返回的resultStatus,具体意思是: 9000 订单支付成功 8000 正在处理中 4000 订单支付失败 6001 用户中途取消 6002 网络连接出错 还有memo,意思就是...

RainOrz
今天
4
0
electron webview 页面加载事件顺序

1.did-start-loading 页面开始加载 2.load-commit 主页面文档加载 3.page-title-updated title 4.dom-ready 主页面 dom 加载完成 5.load-commit frame文档加载 6.did-frame-finish-load fram......

dubox
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部