文档章节

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
2018/04/01
0
0
冒泡排序(Bubble Sort)

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

野渡书生
2016/04/29
29
0
内排序及时间复杂度分析-插入排序&选择排序&交换排序&归并排序&分配和索引排序对比

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

tcfellow
2018/07/16
0
0
算法导论第二章小试牛刀

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

chambai
2015/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
12分钟前
0
0
如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
2
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
4
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
4
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部