101

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Взял совсем простой код для эксперимента: без записей в реестр и тому подобного. Пытаюсь действовать по инструкции, но не совсем её понимаю. В частности вот эту часть:

compile:=ihidestr("A_IsCompiled")
oedit:=ihidestr("Введите свой текст")
obutton:=ihidestr("Проверить")
prog_name:=ihidestr("Example")
entered:=ihidestr("Вы ввели: ")
bx:=ihidestr("205")
by:=ihidestr("175")
bw:=ihidestr("80")

Мой исходный код:

global var5
global var6
 
 
 
var1 := "Число?"
var2 := 600
var3 := 500
var4 := 20
var7 := 0

 
InputBox,var5,%var1%,,,,,%va2%,%var3%,,%var4%,%var4%
MsgBox,0,%var5%,% f1(),%var7%
Exitapp



f1()
    {
    if (var5 > A_DD)
        var6 := "Больше"
    else
        var6 := "Меньше или равно"
    return var6
    }

Мой подготовленный код:


;$OBFUSCATOR: $DUMP_SECFRAGS_FORCLASSES: common
;$OBFUSCATOR: $DUMP_TMESSFRAGS_FORCLASSES: common
;$OBFUSCATOR: $GLOBVARFRAGS_DUMPALL:
;$OBFUSCATOR: $LOSVARFRAGS_DUMPALL:
;$OBFUSCATOR: $PARAMFRAGS_DUMPALL:
;$OBFUSCATOR: $FUNCFRAGS_DUMPCLASS: unclassed
;$OBFUSCATOR: $FUNCFRAGS_DUMPCLASS: unsecclasses
;$OBFUSCATOR: $LABELFRAGS_DUMPCLASS: unclassed
;$OBFUSCATOR: $LABELFRAGS_DUMPCLASS: unsecclasses
;$OBFUSCATOR: $SYSFUNCFRAGS_DUMPALL: 
;$OBFUSCATOR: $DEFGLOBVARS: var1, var2, var3, var4, var5, var6, var7
;$OBFUSCATOR: $DEFSYSFUNCS:  f1
 
 
 
global var5
global var6
 
 
 
var1 := "Число?"
var2 := 600
var3 := 500
var4 := 20
var7 := 0


InputBox,var5,%var1%,,,,,%va2%,%var3%,,%var4%,%var4%
MsgBox,0,%var5%,% f1(),%var7%
Exitapp


;$OBFUSCATOR: $END_AUTOEXECUTE:
f1()
    {
    if (var5 > A_DD)
        var6 := "Больше"
    else
        var6 := "Меньше или равно"
    return var6
    }

Выходной файл не работает. Что я делаю не так?

102 (изменено: Alectric, 2015-11-15 20:22:51)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Интересно мнение всех, этот код обфусцировали или вручную зашифровали?

;Anchor by Titan, adapted by TheGood
;http://www.autohotkey.com/forum/viewtopic.php?p=377395#377395
Anchor(i, a = "", r = false) {
	static c, cs = 12, cx = 255, cl = 0, g, gs = 8, gl = 0, gpi, gw, gh, z = 0, k = 0xffff, ptr
	If z = 0
		VarSetCapacity(g, gs * 99, 0), VarSetCapacity(c, cs * cx, 0), ptr := A_PtrSize ? "Ptr" : "UInt", z := true
	If (!WinExist("ahk_id" . i)) {
		GuiControlGet, t, Hwnd, %i%
		If ErrorLevel = 0
			i := t
		Else ControlGet, i, Hwnd, , %i%
	}
	VarSetCapacity(gi, 68, 0), DllCall("GetWindowInfo", "UInt", gp := DllCall("GetParent", "UInt", i), ptr, &gi)
		, giw := NumGet(gi, 28, "Int") - NumGet(gi, 20, "Int"), gih := NumGet(gi, 32, "Int") - NumGet(gi, 24, "Int")
	If (gp != gpi) {
		gpi := gp
		Loop, %gl%
			If (NumGet(g, cb := gs * (A_Index - 1)) == gp, "UInt") {
				gw := NumGet(g, cb + 4, "Short"), gh := NumGet(g, cb + 6, "Short"), gf := 1
				Break
			}
		If (!gf)
			NumPut(gp, g, gl, "UInt"), NumPut(gw := giw, g, gl + 4, "Short"), NumPut(gh := gih, g, gl + 6, "Short"), gl += gs
	}
	ControlGetPos, dx, dy, dw, dh, , ahk_id %i%
	Loop, %cl%
		If (NumGet(c, cb := cs * (A_Index - 1), "UInt") == i) {
			If a =
			{
				cf = 1
				Break
			}
			giw -= gw, gih -= gh, as := 1, dx := NumGet(c, cb + 4, "Short"), dy := NumGet(c, cb + 6, "Short")
				, cw := dw, dw := NumGet(c, cb + 8, "Short"), ch := dh, dh := NumGet(c, cb + 10, "Short")
			Loop, Parse, a, xywh
				If A_Index > 1
					av := SubStr(a, as, 1), as += 1 + StrLen(A_LoopField)
						, d%av% += (InStr("yh", av) ? gih : giw) * (A_LoopField + 0 ? A_LoopField : 1)
			DllCall("SetWindowPos", "UInt", i, "UInt", 0, "Int", dx, "Int", dy
				, "Int", InStr(a, "w") ? dw : cw, "Int", InStr(a, "h") ? dh : ch, "Int", 4)
			If r != 0
				DllCall("RedrawWindow", "UInt", i, "UInt", 0, "UInt", 0, "UInt", 0x0101) ; RDW_UPDATENOW | RDW_INVALIDATE
			Return
		}
	If cf != 1
		cb := cl, cl += cs
	bx := NumGet(gi, 48, "UInt"), by := NumGet(gi, 16, "Int") - NumGet(gi, 8, "Int") - gih - NumGet(gi, 52, "UInt")
	If cf = 1
		dw -= giw - gw, dh -= gih - gh
	NumPut(i, c, cb, "UInt"), NumPut(dx - bx, c, cb + 4, "Short"), NumPut(dy - by, c, cb + 6, "Short")
		, NumPut(dw, c, cb + 8, "Short"), NumPut(dh, c, cb + 10, "Short")
	Return, true
}

Разобраться в нем конечно можно, но желание пропадает после нескольких строк...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

103 (изменено: Alectric, 2015-11-15 21:05:42)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

OFF:
В этом коде есть две строки:

If (NumGet(g, cb := gs * (A_Index - 1)) == gp, "UInt") {
If (NumGet(c, cb := cs * (A_Index - 1), "UInt") == i) {

Это ошибка или для NumGet допускается выносить параметр (тип данных) за скобки?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

104

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

Разбираться в нём отдельно от контекста особого смысла нет. Если копнуть оригинал, то там далее процедура в маш.кодах, т.е. все cs, cx и прочее - скорее всего, названия регистров. Сама запись вышла такой от поставленной задачи, вряд ли автор хотел зашифровать, "оно само получилось".

105 (изменено: Alectric, 2015-11-15 21:19:11)

Re: AHK: Разрабатываем собственный обфускатор и пр. для защиты

OFF:
Вообще довольно неплохая функция для авто-изменения размеров контролов для gui.

    Gui, +Resize +OwnDialogs
    Gui, Add, Edit, r10 w300 vtxtDialog ReadOnly hwndhtxtDialog
    Gui, Add, Edit, xm w250 vtxtInput hwndhtxtInput ReadOnly Limit65535
    Gui, Add, Button, x+5 w45 hp vbtnSend hwndhbtnSend Default Disabled , Send
    Gui, Add, Text, xm w300 vlblStatus hwndhlblStatus, Not connected...
    Gui, +MinSize
    Gui, Show
return


GuiSize:
    Anchor(htxtDialog, "wh")
    Anchor(htxtInput, "wy")
    Anchor(hbtnSend, "xy")
    Anchor(hlblStatus, "wy", 1)
Return

Правда код старый - нужно править DLLCall там где должно быть Ptr.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.