首页
社区
课程
招聘
[分享]關於 Crackme 基礎教學 (軟硬體保護技術手冊--拷貝心得集, 台灣版)-- 後記!
发表于: 2009-5-5 21:19 46023

[分享]關於 Crackme 基礎教學 (軟硬體保護技術手冊--拷貝心得集, 台灣版)-- 後記!

2009-5-5 21:19
46023
收藏
免费 7
支持
分享
最新回复 (108)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
51
解是不可能了.
算法归算法, 那程序我还有问题要问r大
(从逆向的看点来问的)
2009-5-8 16:58
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
52
r大:
  拿到exe, 以逆向者所看到的东西如下 (若我没逆错的话)
  注: 另一个解先不考虑.



如何去看出这是你列的算法 ?
2009-5-8 19:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
都看别人的帖子好久了...回复一下
2009-5-8 19:24
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
54
請問 sessiondiy 大大~
B 是不是為 SN 的三次方?
因為 A= SN*SN
B = A * SN = SN * SN * SN = ( SN 的三次方)
請問是這樣嗎?
2009-5-8 19:27
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
55
报告r大大大, 不是.

假设 d=SN*SN = SN^2
所以 A:= func(d)

A 已成   High64(d)*3B
       + Low64(d)
       + 溢出的部份*3B


你看我上面 [func注解] 即知
(当时追踪时我直接有数据代进去的)

我知道很多数学算法'公式转成电脑时都可以有变形方法.
问题是这对逆向者是非常不利的.
若是你看到这样的计算, 你如何确定这是你上面列出的 Crackme 算法.
因为没看出算法等于不用破了.

当时的作者也有讲光看程序是解不了的, 除非看出算法.
利害了,  他自己最后也直接讲算法而己.

忘了讲. 另一组同样做这样的运算, 如下 :
  A= func(95AC9329AC4BC9B5 * 95AC9329AC4BC9B5)
  B= func(A * 95AC9329AC4BC9B5)

最后...没记错的话, (有点久了)
1)   2个B相加 = FFFFFFFFFFFFFFC5 则 成功
2)   2个B相等 则 成功  (所以我在52楼说 : 我得求 B = 51353DEF4A066053 时的 SN)
2009-5-8 19:46
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
56
上一楼有更新了喔.
等你喔
r大r大r这么大r那A这么大....
2009-5-8 20:09
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
57

假设 d=SN*SN = SN^2
所以 A:= func(d)


1)
我懂 d = SN 的平方


A 已成 High128(d)*3B
+ Low128(d)
+ 溢出的部份*3B

2)
那個 function 是要做 「High128(d)*3B+Low128(d)+溢出的部份*3B」?
那請問:
Ⅰ. 為什麼要  High128(d)*3B ?
Ⅱ. 為什麼要  Low128(d) ?
Ⅲ. 為什麼要 )+溢出的部份*3B ?

(一). high 128() 是取 high bits or high bytes 之意嗎?
(二). low 128() 只取 low bits or low bytes 之意嗎?
(三). 為什要加上 3B ?
2009-5-8 20:33
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
58
sorry.... 写错了.
下列 x ' A ' B 都是64bit, 只是中间的运算可达128bit

经过
A:= func(x*x)
B:= func(A*x)
有没有可能这样是在算 c ?

公式 x^2=(-c)^r (mod p)
p=0xFFFFFFFFFFFFFFC5 , 2的补数 = 3B

再贴一次func注解:
以 AECAC210B5F99F72 ' 95AC9329AC4BC9B5 为例
func(AECAC210B5F99F72 * 95AC9329AC4BC9B5)
=func(6631D7A8FEB13432D3045B35F6143D9A)

3B * 6631D7A8FEB13432 + D3045B35F6143D9A ;High64bit(d)*3B + Low64bit(d)
= 1860810F28A8EB4520
=> 18 * 3B + 60810F28A8EB4520 ; + 溢出的部份*3B
= 60810F28A8EB4AA8
2009-5-8 21:06
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
59
session学的好认真。我看到密码书就头大犯困。
2009-5-8 22:56
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
60
这个先不讨论了.
最后的2种比对好像有点记错了.
抱歉误了你的时间.
程度太差, 等日后有问题再跟你请教.
谢谢!
2009-5-8 23:33
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
61
這麼說好了:

1)
原本的那位作者他沒有交代的很清楚,他只大概的講了一個 algorithm 的大方向。

而我,只是把他的核心技術要用到的基本理論提取出來補充。

(1) x^6= -c (mod p)

(2) x^6= -c*0x95AC9329AC4BC9B5 (mod p)

以上這個,“x”你要先知道才有辦法算出“-c”

這裏的-c(負c)不是真的-c(負c),它只是一個概念。

請記住一件事,在所有數經過 (mod p)之後,一定是正整數(positive integer number)。不會有負數產生的。

example:

23≡1≡-10(mod 11)

23 = (2*11) + 1   所以餘數為1

-23≡-1≡10(mod 11)

-23 = (-2*11) - 1  所以餘數 是 -1,但是 在 (mod 11)後不會有負數(negative number)存在,所以要,-1+11=10.

{0,1,2,3,4,5,6,7,8,9,10}

上面有11個元素,分別是0到10,你由左邊的0向右邊開始數23次,最後會停在1的位置;或是由右邊的10開始向左邊數10次,也會停在1的位置。

現在,我們得到一個結論,由左邊往右邊數的方向是“正”的,由右邊向左邊數的方向是“負”的。

那現再來算一次-23這個數字,由右邊向左邊數23次,會停留在“10”的位置,或是由右邊向左邊數1次(本身的位置),也會停在“10”的位置。

現在,我們再重新整裏一下:

x^6= -c (mod p),

你要現算出 (x^6)+c ≡0(modp)   ===>意思就是 (x^6)+c 剛好可以整除p,也就是說是p的倍數。等號右邊的-c移到等號的左邊變成+c

example:

x=13, x^6 = 4826809, p=101,

則    x^6=4826809≡19(mod 101),因為我們得到 19,19不是負數,所以要換一下。

19≡-82(mod 101)。

再改寫一下式子如下:

x^6≡-82(mod 101),這就是我們要的結果。

我們可以驗證一下,

(13^6)+82 /101 會不會整除?

4826809+82=4826891/101=47791.  答案是肯定的。 所以,(x^6)+82≡0( mod 101).

以上我先把-c 的概念講解給你聽,後面再一步一步解決你的每一個問題。
2009-5-9 02:55
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
62
老大你太神了, 知道我数学白吃.
问题是前几帖我写的最后 1)  2) 比对可能是错的
对于你讲解有差吗 ?
2009-5-9 03:03
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
63


沒有差別,但你可能有一些地方,思考錯了。

並不是你不懂,是你思考的方向及內容有一點誤解。

現在,跟著我學習這一個小知識,你或獲得更多,也更充實。

我們大家一起努力把你的疑惑,找出來解決。

希望我這樣一個步驟一個步驟解說,你會看的懂。

若不清楚,你要指出來。

這樣我才有辦法講下一個。
2009-5-9 03:08
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
64


根據你的方法,所獲得的結果;根據我的方法,所獲得的結果會不一樣。

因為 你的結果≠我的結果。

example:

你把 p=0xFFFFFFFFFFFFFFC5 ,取了 2 的補碼為 3B (是正確的,沒錯)。

但是,我就不知道,你這個 3B 要做什麼用。

而且,你說:

经过
A:= func(x*x)
B:= func(A*x)
有没有可能这样是在算 c ?   ===> 我不明白,你怎麼算出c!?

※ 不過我也樂意陪你一起來瞭解這個算法,我也可以從你那裏學到我不會,我也不懂的知識。
    三人行,必有我師焉。
2009-5-9 03:24
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
65
我找个时间列出 code , 注上过程中的值
(作者有提供2组)
2009-5-9 03:48
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
66
我給你這個 source code,把這個 code ,assembling 成 crackme2.exe
會跟原來的crackme2.exe 一模一樣。

你若有空,重新把它優化(optimize)。


;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: Mach EDV Dienstleistungen, Jan	Mach, 1	user, adv, 11/2007  |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	9C4696CDB017B906948344388D3753FC

; File Name   :	C:\Temp\mozOpenDownload\crackme2.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00000574 (   1396.)
; Section size in file		: 00000600 (   1536.)
; Offset to raw	data for section: 00000200
; Flags	60000020: Text Executable Readable
; Alignment	: default
;
; Imports from KERNEL32.dll
;

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Externs
; _idata
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
		extrn GetModuleHandleA:dword ; CODE XREF: start+Dp
					; DATA XREF: start+Dr
; void __stdcall ExitProcess(UINT uExitCode)
		extrn ExitProcess:dword	; CODE XREF: start+1Cp
					; DATA XREF: start+1Cr

;
; Imports from USER32.dll
;
; LRESULT __stdcall SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
		extrn SendMessageA:dword ; CODE	XREF: DialogFunc+223p
					; DialogFunc+24Cp ...
; BOOL __stdcall EndDialog(HWND	hDlg, INT_PTR nResult)
		extrn EndDialog:dword	; CODE XREF: DialogFunc+212p
					; DATA XREF: DialogFunc+212r
; int __stdcall	MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption,	UINT uType)
		extrn MessageBoxA:dword	; CODE XREF: DialogFunc+205p
					; DATA XREF: DialogFunc+205r
; int __stdcall	GetWindowTextA(HWND hWnd, LPSTR	lpString, int nMaxCount)
		extrn GetWindowTextA:dword ; CODE XREF:	DialogFunc+5Ep
					; DialogFunc+6Dp
					; DATA XREF: ...
; HWND __stdcall GetDlgItem(HWND hDlg, int nIDDlgItem)
		extrn GetDlgItem:dword	; CODE XREF: DialogFunc+55p
					; DialogFunc+6Ap ...
; INT_PTR __stdcall DialogBoxParamA(HINSTANCE hInstance, LPCSTR	lpTemplateName,	HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)
		extrn DialogBoxParamA:dword ; CODE XREF: start+14p
					; DATA XREF: start+14r

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Execute
_text		segment	para public 'CODE' use32
		assume cs:_text
		;org 401024h
		assume es:nothing, ss:nothing, ds:_text, fs:nothing, gs:nothing
		align 8
byte_401028	db 43h			; DATA XREF: DialogFunc:loc_40133Br
aDfhkmpqtvx2346	db 'DFHKMPQTVX23468',0
		align 4
; char Text[]
Text		db 'Wrong Key!',0       ; DATA XREF: DialogFunc+1FDo
		align 4
; char Caption[]
Caption		db 'Try again',0        ; DATA XREF: DialogFunc+1F8o
		align 4
aRegistered	db 'Registered!',0      ; DATA XREF: DialogFunc+1EFo
aCongratulation	db 'Congratulations',0  ; DATA XREF: DialogFunc+1EAo

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

sub_401070	proc near		; CODE XREF: sub_401120+Fp
					; sub_401120+1Fp ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		movzx	eax, cx
		movzx	esi, dx
		shr	edx, 10h
		shr	ecx, 10h
		push	edi
		mov	edi, eax
		mov	ebx, edx
		imul	edx, eax
		imul	edi, esi
		mov	eax, ecx
		imul	ecx, esi
		imul	eax, ebx
		mov	ebx, eax
		movzx	eax, cx
		mov	esi, edi
		shr	esi, 10h
		add	esi, eax
		movzx	eax, dx
		add	esi, eax
		mov	eax, esi
		shr	eax, 10h
		shr	ecx, 10h
		add	eax, ecx
		movzx	ecx, bx
		shr	edx, 10h
		add	eax, edx
		add	eax, ecx
		mov	word ptr [ebp+var_4], ax
		movzx	ecx, di
		shr	eax, 10h
		shr	ebx, 10h
		add	eax, ebx
		mov	[ebp+var_8], ecx
		pop	edi
		mov	word ptr [ebp+var_8+2],	si
		mov	word ptr [ebp+var_4+2],	ax
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		pop	esi
		pop	ebx
		leave
		retn
sub_401070	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

sub_4010E0	proc near		; CODE XREF: sub_401120+B5p
					; sub_401120+BCp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_8]
		mov	ecx, [ebp+arg_C]
		mov	edx, [ebp+arg_4]
		push	esi
		adc	edx, ecx
		push	edi
		xor	esi, esi
		xor	edi, edi
		add	ecx, [ebp+arg_4]
		adc	esi, edi
		xor	ecx, ecx
		pop	edi
		or	ecx, esi
		pop	esi
		jz	short loc_40110A
		add	eax, 3Bh
		adc	edx, 0

loc_40110A:				; CODE XREF: sub_4010E0+22j
		cmp	edx, 0FFFFFFFFh
		jb	short loc_40111C
		ja	short loc_401116
		cmp	eax, 0FFFFFFC5h
		jb	short loc_40111C

loc_401116:				; CODE XREF: sub_4010E0+2Fj
		add	eax, 3Bh
		adc	edx, 0

loc_40111C:				; CODE XREF: sub_4010E0+2Dj
					; sub_4010E0+34j
		pop	ebp
		retn	10h
sub_4010E0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame

sub_401120	proc near		; CODE XREF: DialogFunc+197p
					; DialogFunc+19Ep ...

var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	edx, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		call	sub_401070
		mov	ecx, [ebp+arg_0]
		mov	edi, edx
		mov	edx, [ebp+arg_C]
		mov	[ebp+var_18], eax
		call	sub_401070
		mov	ecx, [ebp+arg_4]
		mov	ebx, edx
		mov	edx, [ebp+arg_8]
		mov	[ebp+var_8], eax
		call	sub_401070
		mov	ecx, [ebp+arg_4]
		mov	[ebp+var_C], edx
		mov	edx, [ebp+arg_C]
		mov	esi, eax
		call	sub_401070
		xor	ecx, ecx
		mov	[ebp+arg_8], eax
		xor	eax, eax
		add	esi, [ebp+var_8]
		push	3Bh
		adc	ecx, eax
		add	esi, edi
		adc	ecx, eax
		mov	[ebp+arg_0], esi
		xor	esi, esi
		add	ecx, [ebp+arg_8]
		adc	esi, eax
		add	ecx, [ebp+var_C]
		adc	esi, eax
		add	ecx, ebx
		adc	esi, eax
		lea	eax, [esi+edx]
		cmp	eax, 0FFFFFFFFh
		mov	edi, eax
		pop	esi
		jb	short loc_4011A2
		ja	short loc_40119B
		cmp	ecx, 0FFFFFFC5h
		jb	short loc_4011A2

loc_40119B:				; CODE XREF: sub_401120+74j
		add	ecx, esi
		adc	eax, 0
		mov	edi, eax

loc_4011A2:				; CODE XREF: sub_401120+72j
					; sub_401120+79j
		mov	edx, esi
		call	sub_401070
		mov	[ebp+arg_C], edx
		mov	edx, esi
		mov	ecx, edi
		mov	ebx, eax
		call	sub_401070
		xor	ecx, ecx
		xor	edi, edi
		add	eax, [ebp+arg_C]
		adc	ecx, edi
		add	ecx, edx
		mov	edx, esi
		mov	edi, eax
		call	sub_401070
		push	edx
		push	eax
		push	edi
		push	ebx
		push	[ebp+arg_0]
		push	[ebp+var_18]
		call	sub_4010E0
		push	edx
		push	eax
		call	sub_4010E0
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_401120	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame fpd=68h

; INT_PTR __stdcall DialogFunc(HWND, UINT, WPARAM, LPARAM)
DialogFunc	proc near		; DATA XREF: start+2o

var_8B8		= dword	ptr -8B8h
var_8B4		= dword	ptr -8B4h
String		= byte ptr -0B8h
var_64		= byte ptr -64h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
hDlg		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		lea	ebp, [esp-68h]
		mov	eax, [ebp+68h+arg_4]
		sub	esp, 8B8h
		sub	eax, 110h
		push	ebx
		push	esi
		push	edi
		jz	loc_401413
		dec	eax
		jnz	short loc_401222
		movzx	eax, word ptr [ebp+68h+arg_8]
		dec	eax
		jz	loc_401402
		dec	eax
		jz	loc_4013F5
		mov	ebx, 3E8h
		sub	eax, ebx
		jz	short loc_401229

loc_401222:				; CODE XREF: DialogFunc+1Dj
		xor	eax, eax
		jmp	loc_40144B
; ---------------------------------------------------------------------------

loc_401229:				; CODE XREF: DialogFunc+38j
		mov	esi, GetDlgItem
		push	51h		; nMaxCount
		lea	eax, [ebp+68h+String]
		push	eax		; lpString
		push	3E9h		; nIDDlgItem
		push	[ebp+68h+hDlg]	; hDlg
		call	esi ; GetDlgItem
		mov	edi, GetWindowTextA
		push	eax		; hWnd
		call	edi ; GetWindowTextA
		push	51h		; nMaxCount
		lea	eax, [ebp+68h+var_64]
		push	eax		; lpString
		push	ebx		; nIDDlgItem
		push	[ebp+68h+hDlg]	; hDlg
		call	esi ; GetDlgItem
		push	eax		; hWnd
		call	edi ; GetWindowTextA
		cmp	[ebp+68h+String], 0
		jz	loc_401448
		cmp	[ebp+68h+var_64], 0
		jz	loc_401448
		or	esi, 0FFFFFFFFh
		lea	eax, [ebp+68h+String]
		mov	[ebp+68h+arg_4], eax
		mov	edi, esi
		xor	ebx, ebx

loc_401278:				; CODE XREF: DialogFunc+E3j
		mov	eax, ebx
		cdq
		mov	[ebp+68h+var_4], edx
		mov	[ebp+68h+arg_8], 8

loc_401285:				; CODE XREF: DialogFunc+CAj
		mov	ecx, eax
		and	ecx, 1
		xor	edx, edx
		or	ecx, edx
		mov	ecx, [ebp+68h+var_4]
		jz	short loc_4012A6
		shrd	eax, ecx, 1
		shr	ecx, 1
		xor	eax, 0AC4BC9B5h
		xor	ecx, 95AC9329h
		jmp	short loc_4012AC
; ---------------------------------------------------------------------------

loc_4012A6:				; CODE XREF: DialogFunc+A9j
		shrd	eax, ecx, 1
		shr	ecx, 1

loc_4012AC:				; CODE XREF: DialogFunc+BCj
		dec	[ebp+68h+arg_8]
		mov	[ebp+68h+var_4], ecx
		jnz	short loc_401285
		mov	[ebp+ebx*8+68h+var_8B8], eax
		mov	eax, ecx
		mov	[ebp+ebx*8+68h+var_8B4], eax
		inc	ebx
		cmp	ebx, 100h
		jl	short loc_401278
		movzx	eax, [ebp+68h+String]

loc_4012D1:				; CODE XREF: DialogFunc+10Fj
		xor	eax, edi
		shrd	edi, esi, 8
		and	eax, 0FFh
		xor	edi, [ebp+eax*8+68h+var_8B8]
		shr	esi, 8
		xor	esi, [ebp+eax*8+68h+var_8B4]
		inc	[ebp+68h+arg_4]
		mov	eax, [ebp+68h+arg_4]
		mov	al, [eax]
		test	al, al
		jnz	short loc_4012D1
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+68h+var_8], edi
		mov	[ebp+68h+var_4], esi
		jb	short loc_401317
		ja	short loc_40130B
		cmp	edi, 0FFFFFFC5h
		jb	short loc_401317

loc_40130B:				; CODE XREF: DialogFunc+11Cj
		add	edi, 3Bh
		adc	esi, 0
		mov	[ebp+68h+var_8], edi
		mov	[ebp+68h+var_4], esi

loc_401317:				; CODE XREF: DialogFunc+11Aj
					; DialogFunc+121j
		lea	eax, [ebp+68h+var_64]
		lea	edx, [eax+1]

loc_40131D:				; CODE XREF: DialogFunc+13Aj
		mov	cl, [eax]
		inc	eax
		test	cl, cl
		jnz	short loc_40131D
		sub	eax, edx
		cmp	eax, 13h
		jnz	loc_4013DE
		mov	dl, [ebp+68h+var_64]
		xor	eax, eax
		lea	esi, [ebp+68h+var_64]
		xor	ecx, ecx

loc_401339:				; CODE XREF: DialogFunc+181j
		xor	ebx, ebx

loc_40133B:				; CODE XREF: DialogFunc+15Fj
		cmp	dl, byte_401028[ebx]
		jz	short loc_40134B
		inc	ebx
		cmp	ebx, 11h
		jb	short loc_40133B
		jmp	short loc_401364
; ---------------------------------------------------------------------------

loc_40134B:				; CODE XREF: DialogFunc+159j
		push	10h
		pop	edx
		mul	edx
		mov	[ebp+68h+var_10], eax
		mov	edi, edx
		shl	ecx, 4
		mov	eax, ebx
		cdq
		add	edi, ecx
		add	eax, [ebp+68h+var_10]
		adc	edx, edi
		mov	ecx, edx

loc_401364:				; CODE XREF: DialogFunc+161j
		inc	esi
		mov	dl, [esi]
		test	dl, dl
		jnz	short loc_401339
		mov	esi, ecx
		and	esi, 80000000h
		xor	edx, edx
		or	edx, esi
		jz	short loc_4013DE
		push	ecx
		push	eax
		push	ecx
		push	eax
		push	ecx
		push	eax
		call	sub_401120
		push	edx
		push	eax
		call	sub_401120
		push	95AC9329h
		push	0AC4BC9B5h
		push	[ebp+68h+var_4]
		mov	esi, eax
		push	[ebp+68h+var_8]
		mov	edi, edx
		call	sub_401120
		push	edx
		push	eax
		push	edi
		push	esi
		push	edi
		push	esi
		call	sub_401120
		push	edx
		push	eax
		call	sub_4010E0
		mov	ecx, eax
		or	ecx, edx
		jz	short loc_4013D0
		push	0FFFFFFC5h
		pop	ecx
		sub	ecx, [ebp+68h+var_8]
		push	0FFFFFFFFh
		pop	esi
		sbb	esi, [ebp+68h+var_4]
		cmp	eax, ecx
		jnz	short loc_4013DE
		cmp	edx, esi
		jnz	short loc_4013DE

loc_4013D0:				; CODE XREF: DialogFunc+1D2j
		push	40h
		push	offset aCongratulation ; "Congratulations"
		push	offset aRegistered ; "Registered!"
		jmp	short loc_4013EA
; ---------------------------------------------------------------------------

loc_4013DE:				; CODE XREF: DialogFunc+141j
					; DialogFunc+18Fj ...
		push	10h		; uType
		push	offset Caption	; "Try again"
		push	offset Text	; "Wrong Key!"

loc_4013EA:				; CODE XREF: DialogFunc+1F4j
		push	[ebp+68h+hDlg]	; hWnd
		call	MessageBoxA
		jmp	short loc_401448
; ---------------------------------------------------------------------------

loc_4013F5:				; CODE XREF: DialogFunc+2Bj
		push	2		; nResult
		push	[ebp+68h+hDlg]	; hDlg
		call	EndDialog
		jmp	short loc_401448
; ---------------------------------------------------------------------------

loc_401402:				; CODE XREF: DialogFunc+24j
		push	0		; lParam
		push	0		; wParam
		push	28h		; Msg
		push	[ebp+68h+hDlg]	; hWnd
		call	SendMessageA
		jmp	short loc_401448
; ---------------------------------------------------------------------------

loc_401413:				; CODE XREF: DialogFunc+16j
		mov	esi, GetDlgItem
		push	0		; lParam
		push	50h		; wParam
		mov	ebx, 0C5h
		push	ebx		; Msg
		push	3E9h		; nIDDlgItem
		push	[ebp+68h+hDlg]	; hDlg
		call	esi ; GetDlgItem
		mov	edi, SendMessageA
		push	eax		; hWnd
		call	edi ; SendMessageA
		push	0		; lParam
		push	50h		; wParam
		push	ebx		; Msg
		push	3E8h		; nIDDlgItem
		push	[ebp+68h+hDlg]	; hDlg
		call	esi ; GetDlgItem
		push	eax		; hWnd
		call	edi ; SendMessageA

loc_401448:				; CODE XREF: DialogFunc+73j
					; DialogFunc+7Dj ...
		xor	eax, eax
		inc	eax

loc_40144B:				; CODE XREF: DialogFunc+3Cj
		pop	edi
		pop	esi
		pop	ebx
		add	ebp, 68h
		leave
		retn	10h
DialogFunc	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn

		public start
start		proc near
		push	0		; dwInitParam
		push	offset DialogFunc ; lpDialogFunc
		push	0		; hWndParent
		push	67h		; lpTemplateName
		push	0		; lpModuleName
		call	GetModuleHandleA
		push	eax		; hInstance
		call	DialogBoxParamA
		push	0		; uExitCode
		call	ExitProcess
start		endp

; ---------------------------------------------------------------------------
		align 4
		dd 14B4h, 2 dup(0)
		dd 14FEh, 1000h, 14C0h,	2 dup(0)
		dd 1568h, 100Ch, 5 dup(0)
		dd 14EAh, 14DCh, 0
		dd 150Ch, 151Ch, 1528h,	1536h, 1548h, 1556h, 0
		dd 784500B9h, 72507469h, 7365636Fh, 17F0073h, 4D746547h
		dd 6C75646Fh, 6E614865h, 41656C64h, 454B0000h, 4C454E52h
		dd 642E3233h, 6C6Ch, 6553023Bh,	654D646Eh, 67617373h, 4165h
		dd 6E4500C6h, 61694464h, 676F6Ch, 654D01DFh, 67617373h
		dd 786F4265h, 1770041h,	57746547h, 6F646E69h, 78655477h
		dd 4174h, 65470111h, 676C4474h,	6D657449h, 9E0000h, 6C616944h
		dd 6F42676Fh, 72615078h, 416D61h, 52455355h, 642E3233h
		dd 6C6Ch, 23h dup(0)
_text		ends

; Section 2. (virtual address 00002000)
; Virtual size			: 00000190 (	400.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00000800
; Flags	40000040: Data Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rsrc		segment	para public 'DATA' use32
		assume cs:_rsrc
		;org 402000h
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    1
		db    0
		db    5
		db    0
		db    0
		db    0
		db  18h
		db    0
		db    0
		db  80h	; €
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    1
		db    0
		db  67h	; g
		db    0
		db    0
		db    0
		db  30h	; 0
		db    0
		db    0
		db  80h	; €
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    1
		db    0
		db    9
		db    4
		db    0
		db    0
		db  48h	; H
		db    0
		db    0
		db    0
		db  60h	; `
		db  20h
		db    0
		db    0
		db  30h	; 0
		db    1
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    1
		db    0
		db 0FFh
		db 0FFh
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db  40h	; @
		db    0
		db 0C8h	; ?
		db  90h	; ?
		db    5
		db    0
		db  16h
		db    0
		db  11h
		db    0
		db  72h	; r
		db    0
		db  5Ch	; \
		db    0
		db    0
		db    0
		db    0
		db    0
		db  63h	; c
		db    0
		db  72h	; r
		db    0
		db  61h	; a
		db    0
		db  63h	; c
		db    0
		db  6Bh	; k
		db    0
		db  6Dh	; m
		db    0
		db  65h	; e
		db    0
		db  32h	; 2
		db    0
		db    0
		db    0
		db    9
		db    0
		db  90h	; ?
		db    1
		db    0
		db    0
		db  56h	; V
		db    0
		db  65h	; e
		db    0
		db  72h	; r
		db    0
		db  64h	; d
		db    0
		db  61h	; a
		db    0
		db  6Eh	; n
		db    0
		db  61h	; a
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    2
		db    0
		db  80h	; €
		db    0
		db    1
		db  50h	; P
		db    4
		db    0
		db  14h
		db    0
		db  69h	; i
		db    0
		db  0Ch
		db    0
		db 0E9h	; ?
		db    3
		db    0
		db    0
		db 0FFh
		db 0FFh
		db  81h	; ?
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    2
		db    0
		db  80h	; €
		db    0
		db    1
		db  50h	; P
		db    4
		db    0
		db  34h	; 4
		db    0
		db  69h	; i
		db    0
		db  0Ch
		db    0
		db 0E8h	; ?
		db    3
		db    0
		db    0
		db 0FFh
		db 0FFh
		db  81h	; ?
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    1
		db  50h	; P
		db  23h	; #
		db    0
		db  48h	; H
		db    0
		db  2Ch	; ,
		db    0
		db  0Fh
		db    0
		db 0EAh	; ?
		db    3
		db    0
		db    0
		db 0FFh
		db 0FFh
		db  80h	; €
		db    0
		db  26h	; &
		db    0
		db  52h	; R
		db    0
		db  65h	; e
		db    0
		db  67h	; g
		db    0
		db  69h	; i
		db    0
		db  73h	; s
		db    0
		db  74h	; t
		db    0
		db  65h	; e
		db    0
		db  72h	; r
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    2
		db  50h	; P
		db    4
		db    0
		db    7
		db    0
		db  19h
		db    0
		db    8
		db    0
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db  82h	; ?
		db    0
		db  4Eh	; N
		db    0
		db  61h	; a
		db    0
		db  6Dh	; m
		db    0
		db  65h	; e
		db    0
		db  3Ah	; :
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    2
		db  50h	; P
		db    4
		db    0
		db  28h	; (
		db    0
		db  14h
		db    0
		db    8
		db    0
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db  82h	; ?
		db    0
		db  4Bh	; K
		db    0
		db  65h	; e
		db    0
		db  79h	; y
		db    0
		db  3Ah	; :
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    2
		db  50h	; P
		db    4
		db    0
		db  28h	; (
		db    0
		db  14h
		db    0
		db    8
		db    0
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db 0FFh
		db  82h	; ?
		db    0
		db  4Bh	; K
		db    0
		db  65h	; e
		db    0
		db  79h	; y
		db    0
		db  3Ah	; :
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
_rsrc		ends


		end start


※ 這是 PSchool 給我的 code。我請他轉給我。
2009-5-9 03:59
0
雪    币: 233
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
67
我晕 就往IDA一拖
F5都不按
那不是什么源码都拖拖就来了
2009-5-9 08:04
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
68
嗯。應該是。
2009-5-9 11:55
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
69
整个验证过程如下 :

CRC64('luxor') = 3E1DA1692FDB01D6
SN = 2F23-QQ3M-PX66-P4PF
   = B2BC77C56AEE6D625 (怎么转来的就不管他了)

因为下列一直有调用 sub_401120, 先说明一下 (后面会证明此函式的算法)
  -> 输入4个参数 (看成2个 64bit 的值)
  <- 返回值放在 EDX EAX  (看成1个 64bit 的值)

------------------
我没删除任何行数
------------------

/*   push 序号 B2BC77C56AEE6D62

00401379   .  51          push    ecx          ; /Arg4 = B2BC77C5
0040137A   .  50          push    eax          ; |Arg3 = 6AEE6D62


/*                    SN                 SN
/*   sub_401120(B2BC77C56AEE6D62, B2BC77C56AEE6D62) = 1BF2F29A0FEBDD6F
/*   这就是我说的 A = sub_401120(SN,SN)

0040137B   .  51          push    ecx          ; |/Arg4 = B2BC77C5
0040137C   .  50          push    eax          ; ||Arg3 = 6AEE6D62
0040137D   .  51          push    ecx          ; ||Arg2 = B2BC77C5
0040137E   .  50          push    eax          ; ||Arg1 = 6AEE6D62
0040137F   .  E8 9CFDFFFF call    sub_401120

/*                    A                 SN
/*  sub_401120(1BF2F29A0FEBDD6F, B2BC77C56AEE6D62)=A9617875A8DDC4B1 ...(B1)
/*  这就是我说的 B1 = sub_401120(A,SN)

00401384   .  52          push    edx             ; |Arg2 = 1BF2F29A
00401385   .  50          push    eax             ; |Arg1 = 0FEBDD6F
00401386   .  E8 95FDFFFF call    sub_401120

/*  同样的动作作另一组 :
/*    sub_401120(Username, 硬编95AC9329AC4BC9B)
/*  = sub_401120(3E1DA1692FDB01D6, 95AC9329AC4BC9B5) = B94218C111F6611A

0040138B   .  68 2993AC95 push    95AC9329                ; /Arg4 = 95AC9329
00401390   .  68 B5C94BAC push    AC4BC9B5                ; |Arg3 = AC4BC9B5
00401395   .  FF75 64     push    dword ptr [ebp+64]      ; |Arg2 = 3E1DA169
00401398   .  8BF0        mov     esi, eax                ; |
0040139A   .  FF75 60     push    dword ptr [ebp+60]      ; |Arg1 = 2FDB01D6
0040139D   .  8BFA        mov     edi, edx
0040139F   .  E8 7CFDFFFF call    sub_401120

/*   push B94218C111F6611A

004013A4   .  52          push    edx              ; /Arg4 = B94218C1
004013A5   .  50          push    eax              ; |Arg3 = 11F6611A

/*                         B1                B1
/*     = sub_401120(A9617875A8DDC4B1, A9617875A8DDC4B1) = 46BDE73EEE099EAB

004013A6   .  57          push    edi              ; |/Arg4 = A9617875
004013A7   .  56          push    esi              ; ||Arg3 = A8DDC4B1
004013A8   .  57          push    edi              ; ||Arg2 = A9617875
004013A9   .  56          push    esi              ; ||Arg1 = A8DDC4B1
004013AA   .  E8 71FDFFFF call    sub_401120

/*  配上上面 push 的 B94218C111F6611A :
/*      sub_4010E0(46BDE73EEE099EAB, B94218C111F6611A)
/*  sub_4010E0你若进去看即知他是在算 Parm1+ Parm2 - FFFFFFFFFFFFFFC5
/*  所以 46BDE73EEE099EAB + B94218C111F6611A - FFFFFFFFFFFFFFC5
/*     = 0000000000000000

004013AF   .  52          push    edx
004013B0   .  50          push    eax
004013B1   .  E8 2AFDFFFF call    sub_4010E0

此时 EDX=0 , EAX=0

004013B6   .  8BC8        mov     ecx, eax
004013B8   .  0BCA        or      ecx, edx
004013BA   .  74 14       je      short 004013D0	;跳 & 显示恭喜

检查第2种情况 :(作者所提供的2组都没用到这个)

004013BC   .  6A C5       push    -3B
004013BE   .  59          pop     ecx
004013BF   .  2B4D 60     sub     ecx, [ebp+60]		;[ebp+60]=2FDB01D6
004013C2   .  6A FF       push    -1
004013C4   .  5E          pop     esi
004013C5   .  1B75 64     sbb     esi, [ebp+64]		;[ebp+64]=3E1DA169
004013C8   .  3BC1        cmp     eax, ecx
004013CA   .  75 12       jnz     short 004013DE
004013CC   .  3BD6        cmp     edx, esi
004013CE   .  75 0E       jnz     short 004013DE
004013D0   >  6A 40       push    40
004013D2   .  68 60104000 push    00401060              ;"Congratulations"
004013D7   .  68 54104000 push    00401054              ;"Registered!"
004013DC   .  EB 0C       jmp     short 004013EA


---------------------
证明一下我说的  sub_401120(x,y)   详细代码你看PS给你的即可
    d= x*y
    High64(d)*3B
          + Low64(d)
          + 溢出的部份*3B
---------------------

1. 验证一下 sub_401120(B2BC77C56AEE6D62, B2BC77C56AEE6D62)
   是不是传回 1BF2F29A0FEBDD6F

  B2BC77C56AEE6D62 * B2BC77C56AEE6D62 = 7CCAA14EAAB1BFF4 593FC578B8F49984
    7CCAA14EAAB1BFF4 * 3B + 593FC578B8F49984
  = 1CC2B32D2156F73D3C    + 593FC578B8F49984
  = 1D 1BF2F29A0FEBD6C0
    1D * 3B + 1BF2F29A0FEBD6C0
   = 6AF + 1BF2F29A0FEBD6C0 = 1BF2F29A0FEBDD6F           ....  没错


2. 验证一下 sub_401120(1BF2F29A0FEBDD6F, B2BC77C56AEE6D62)
   是不是传回 A9617875A8DDC4B1

 1BF2F29A0FEBDD6F * B2BC77C56AEE6D62 = 1383802CC49C9F65 2A12EE2458C5077E
   1383802CC49C9F65 * 3B + 2A12EE2458C5077E
 = 4 A9617875A8DDC3C5
   4 * 3B + A9617875A8DDC3C5 = A9617875A8DDC4B1           ....  没错


3. 验证一下 sub_401120(3E1DA1692FDB01D6, 95AC9329AC4BC9B5)
   是不是传回 B94218C111F6611A

 3E1DA1692FDB01D6 * 95AC9329AC4BC9B5 = 24511E8FCBC32B9C 5A900D9D1BFB524E
   24511E8FCBC32B9C * 3B + 5A900D9D1BFB524E
 = 8 B94218C111F65F42
   8 * 3B + B94218C111F65F42 = B94218C111F6611A           ....  没错

4. 验证一下 sub_401120(A9617875A8DDC4B1, A9617875A8DDC4B1)
   是不是传回 46BDE73EEE099EAB

 A9617875A8DDC4B1 * A9617875A8DDC4B1 = 7011D627DACD4A24 72A18C0F80B98261
   7011D627DACD4A24 * 3B + 72A18C0F80B98261
 = 1A 46BDE73EEE0998AD
   1A * 3B + 46BDE73EEE0998AD = 46BDE73EEE099EAB          ....  没错


由因推倒果,是很容易的;但要从果去推导因,这会变的很困难。
所以,即便使用 Olly-Debug 这样的工具去追踪程式码,整个程式让你追踪完毕,也跑完了,你可能还不知道这个程式的演算法是什么。尤其对大量计算又复杂结构的演算法来说,更是如此。
我在中篇提到的 crackme2.exe 就是一个例子。
把crackme2.exe 反组译后,看看他的码,很难跟原本的演算法连想在一起,我讲的就是这个意思。


嗯. 你了解我最终想知道的东西.
若你没见过作者的解说, 有人直接丢给你 crackme.exe , 你如何导出原演算法的?
想看得出原算法, 肯定得看出 sub_401120 那些怪动作的意义.
可否先解释一下为何这样简单的算一下, 就等同了验证那些复杂的算法 ?
2009-5-9 13:04
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
70
另一点我好奇的是 :
若我是数学硕士毕业的, 在见到上面那些动作之后,
是否有可能我也无法反推回去还原算法的.

亦即数学家用纸设计了个算法, 要资讯组的人去Coding出来
由于资讯组的人拥有大量的变形替代手法, 到时Coding出来
的东西run的结果虽完全正确, 但其过程是数学家也不知道的手法换出来的.

例如 大数^大数 mod xxx   是不可能真的去先算一下 大数^大数
(sorry, 举例得不是很好)
2009-5-9 14:16
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
71
[QUOTE=sessiondiy;620563]嗯. 你了解我最终想知道的东西.
若你没见过作者的解说, 有人直接丢给你 crackme.exe , 你如何导出原演算法的?
想看得出原算法, 肯定得看出 sub_401120 那些怪动作的意义.
可否先解释一下为何这样简单的算一下, 就等同了验证那些复杂的算法 ? QUOTE]

1)你如何导出原演算法的?

很難,並不是不可能,要花很久的時間。

2)肯定得看出 sub_401120 那些怪动作的意义.

是的。,我猜,它應該是在做 x^2 mod  之類的動作,因為它一直反覆的做。
但是我還是得細細研究才能確定。

3)可否先解释一下为何这样简单的算一下, 就等同了验证那些复杂的算法 ?

我要細細研究,才能回答你,如果原作者所說的都正確,那答案是肯定的。
我想一定有某個環節,我們沒有弄懂。這需要時間好好學習一下。


例如 大数^大数 mod xxx 是不可能真的去先算一下 大数^大数
(sorry, 举例得不是很好)


頂尖的數學家,其實都不太戒用計算機來算。他們幾乎都是用手算,人工算。
200年前或更早,數學家算天文數字怎麼算出來的?人工算。
所以,....你明白我說的。
像“大素數”這種東西,如果有電腦來輔助計算,那會縮短時間。電腦在數值分析上扮演很重要的角色。這點大家都知道。
2009-5-9 16:37
0
雪    币: 134
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
72
給該樓仁兄,

R 大沒請我做「代碼優化」或「反向工程」,所以我才只轉發反組譯的代碼。

話說,我雖然也潛水前很大,但是我來這邊發過兩篇從來沒在「中國互聯網」出現過得翻譯文章,而你只發過兩篇卡樓用的貼子(儘管你在別的地方可能有大量貢獻),試問「你有什麼資格對我作批判」?

我的文章:



【翻譯】SHELLCODE 設計解密

【翻譯】WINDOWS 中的 SHELLCODE 定位與緩衝區溢出

你的回覆:

2009-05-08, 21:26
Replies: 120
系統底層 【求助】風月的 StrongOD 的 Anti Anti_Attach 是怎麼實現的?
Views: 5,911
[QUOTE]Posted By Ffive
»»» 特殊意義 發帖留念

[/QUOTE]

2009-05-09, 08:04
Replies: 69
【分享】關於 Crackme 基礎教學 (軟硬體保護技術手冊--拷貝心得集, 台灣版)-- 後記!
Views: 1,061
[QUOTE]Posted By Ffive
»»» 我暈 就往IDA一拖
F5都不按
那不是什麼源碼都拖拖就來了

[/QUOTE]

最後聲明:我沒跟你吵架的意思,但請不要把自己認為的不應該(不應該把代碼整理都沒整理就轉發)套用到別人身上!
上传的附件:
2009-5-9 16:38
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
73
1)若我是数学硕士毕业的.....

是有可能,你無法推回去的;你也可能推的回去。完全看個人的能力。

2)亦即数学家用纸设计了个算法.....

假使這位數學家(純數)沒有資訊背景,他有可能是不知道的。
但數學家的算法(algorithm),應該是比較老的算法,但需要資訊背景的人來實現(implementation)。如果是應用數學,多少會有一點概念。


3)
由以上你貼的帖來看,你應該沒有理解錯誤,但可能某一個環節漏第掉了,我要再細看才能知道哪裏是我們所漏的地方。
我跟你也一樣,大家都一起學習吧。
我把我知道的分享給你,你也把你知道的分享給我。

你在反向這工作上,做的很順手。請問你做多久了?
2009-5-9 16:49
0
雪    币: 233
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
74
不要激动,我没批判你,我纯属灌水
2009-5-9 17:01
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
75
这题就不顺了.
我只是兴趣玩玩, 所以懂的东西并不多.
2009-5-9 17:57
0
游客
登录 | 注册 方可回帖
返回
//