цікава ваша думка
Java - це масова схибленість, підігріта маркетинговими казочками про легкі фінансові прибутки, і подібні "піраміди" тому підтвердження.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача Kane
цікава ваша думка
Java - це масова схибленість, підігріта маркетинговими казочками про легкі фінансові прибутки, і подібні "піраміди" тому підтвердження.
Так, і не буде працювати при інжекті, якщо одна із бібліотек не буде завантажена (user32/kernel32/ws2_32). Лажа вийшла =\ Гра не варта свічок. Краще один раз написати повноцінний пі-код, аніж частковий, та годинами його дебажити. 200-300 байт не така уж і роскіш..
На граблях, як на батуті, c#$&. Закрийте нафіг тему ((
Під "зайве", я мав на увазі loadlibrary та getprocaddress, відповідно до мого способу. Звісно він не компенсує повної незалежності, але все ж таки, воно буває необхідним. Не економно, заради невеликої кількості call'ів, тягнути свої велосипеди, якщо є можливість елегантно підготувати та використати малу "бойову" ділянку коду.
Дивно все це - шеллкод, розкиданий по секціях РЕ файла, зі статичним імпортом,
частково позиційно-незалежного коду
Як приклад: розробити руткіт для контролю запису в реєстрі, або ж наявності файла на диску, і у разі видалення яких - потрібно усе відновити. У цьому випадку, навіщо мені тягнути зайве?
У якості розминки, наваяв приклад частково позиційно-незалежного коду. Завдяки частковості, ми отримуємо дуже компактне PI-тіло, яке, наприклад, можемо кудись заінжектити.
За приклад візьмемо наступний код:
WSADATA wsaData;
char *m, name[128];
WSAStartup(0x202, &wsaData);
gethostname(name, 128);
m = inet_ntoa(*(struct in_addr*)gethostbyname(name)->h_addr_list[0]);
MessageBoxA(0, m, "Заголовок", MB_OK);
WSACleanup();
ExitProcess(0);
shellcode.asm
format pe gui 5.01
entry start
include 'win32ax.inc'
struct APIS
MessageBoxA rd 1
ExitProcess rd 1
WSAStartup rd 1
gethostname rd 1
inet_ntoa rd 1
gethostbyname rd 1
WSACleanup rd 1
ends
struct CONFIG
apis APIS
wsaData WSADATA
name rb 128
tittle rb 20
ends
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
section '.data' data readable writeable // секція даних
api_table dd nMessageBoxA,\
nExitProcess,\
nWSAStartup,\
ngethostname,\
ninet_ntoa,\
ngethostbyname,\
nWSACleanup,\
-1
nMessageBoxA db 'MessageBoxA', 0
nExitProcess db 'ExitProcess', 0
nWSAStartup db 'WSAStartup', 0
ngethostname db 'gethostname', 0
ninet_ntoa db 'inet_ntoa', 0
ngethostbyname db 'gethostbyname', 0
nWSACleanup db 'WSACleanup', 0
user32 db 'user32', 0
kernel32 db 'kernel32', 0
ws2_32 db 'ws2_32', 0
ttl db 'Заголовок', 0
shc rd 1
cfg rd 1
hHeap rd 1
shellcode:
virtual at ebp
config CONFIG
end virtuaL
lea eax, [config.wsaData]
push eax
push 0x202
call [config.apis.WSAStartup]
push 128
lea eax, [config.name]
push eax
call [config.apis.gethostname]
lea eax, [config.name]
push eax
call [config.apis.gethostbyname]
mov eax, [eax + hostent.h_addr_list]
mov eax, [eax]
push dword[eax]
call [config.apis.inet_ntoa]
push 0
lea edx, [config.tittle]
push edx
push eax
push 0
call [config.apis.MessageBoxA]
call [config.apis.WSACleanup]
push 0
call [config.apis.ExitProcess]
size_shellcode = $ - shellcode
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
section '.text' code readable executable // секція коду
start:
// аналог GetProcessHeap()
mov eax, [fs:0x30]
mov eax, [eax + 0x18]
mov [hHeap], eax
// виділяємо пам'ять під структуру
invoke HeapAlloc, [hHeap], HEAP_ZERO_MEMORY, sizeof.CONFIG
mov [cfg], eax
// ..під шеллкод
invoke HeapAlloc, [hHeap], HEAP_ZERO_MEMORY, size_shellcode
mov [shc], eax
// знаходимо адреси winapi
mov ebx, [cfg]
mov esi, api_table
.a: cmp dword[esi], nMessageBoxA
ja @f
push user32
jmp .b
@@: cmp dword[esi], nExitProcess
ja @f
push kernel32
jmp .b
@@: push ws2_32
.b: invoke LoadLibraryA
invoke GetProcAddress, eax, dword[esi]
mov dword[ebx], eax
add esi, 4
add ebx, 4
cmp dword[esi], -1
jne .a
mov ebx, [cfg]
invoke lstrcpyA, addr ebx + CONFIG.tittle, ttl
// копіюємо шеллкод у пам'ять
mov esi, shellcode
mov edi, [shc]
mov ecx, size_shellcode
rep movsb
// передаєм вказівник на структуру та стартуємо шеллкод
mov ebp, [cfg]
push ebp
jmp [shc]
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
section '.idata' import data readable writeable // секція імпорту
library kernel32, 'kernel32.dll',\
user32, 'user32.dll'
import kernel32,\
GetProcAddress, 'GetProcAddress',\
LoadLibraryA, 'LoadLibraryA',\
HeapAlloc, 'HeapAlloc',\
lstrcpyA, 'lstrcpyA'
; ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
На хабрі, сьогодні - "7 золотих правил одного програміста", і там наступне писано:
...
Не будь перфекционистом
...
Код должен работать без багов, быть тестируемым и читаемым. Все.
...
Мабуть треба відходити від компа, раз такі моменти в IDE та пр. починають дратувати))
Чому б тоді не запровадити оподаткування церков
Та усі інші благодійні фонди. А як проводити облік пожертв?
Корупція та інші "радощі" ведення бізнесу нікуди поки не ділися, а при такому розкладі "підтримка" для IT буде згубною. Ця "стара школа" тільки і вміє усе на метал різати, їм всеодно на розвиток та перспективи, тільки одноразове швидке збагачення!
Мені на думку спало наступне:
// poc.cpp
#include <iostream>
using namespace std;
enum reg {EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI};
class VM {
public:
VM();
~VM();
int GetReg(reg r);
void Mov(reg r, int i);
void Mov(reg a, reg b);
void Add(reg r, int i);
void Add(reg a, reg b);
void Xor(reg r, int i);
private:
int reg_mem[8];
};
VM::VM() {
}
VM::~VM() {
}
int VM::GetReg(reg r) {
return reg_mem[r];
}
void VM::Mov(reg r, int i) {
reg_mem[r] = i;
}
void VM::Mov(reg a, reg b) {
reg_mem[a] = reg_mem[b];
}
void VM::Add(reg r, int i) {
reg_mem[r] += i;
}
void VM::Add(reg a, reg b) {
reg_mem[a] += reg_mem[b];
}
void VM::Xor(reg r, int i) {
reg_mem[r] ^= i;
}
int main() {
VM *vm = new VM();
vm->Mov(ECX, 1111); // mov ecx, 1111
vm->Mov(EAX, ECX); // mov eax, ecx
vm->Add(EAX, 5); // add eax, 5
vm->Mov(ECX, 10); // mov ecx, 10
vm->Add(EAX, ECX); // add eax, ecx
vm->Xor(EAX, 19); // xor eax, 19
cout << vm->GetReg(EAX) << endl; // = 1141
return 0;
}
Тобто дизасмимо тіло, та "перекладаємо" його в такий проміжок. Купа недоліків, в т.ч. статичність методів, які можна задетектити.. хоча це більше підходить для захисту кода від посторонніх очей, аніж від ав. Але все ж таки, як один із варіантів на тему реалізації VM.
а що з ним не так?
Нема галочки аби його згорнути.
а я всерівно не зрозумів
ви про стильfunction () { }
чи про щось інше?
Я про візуальне згортання блоків.
Уточнюю:
Всім привіт.
Якого воно біса так? Було в когось?
Нема такого.. тільки ручна трепанація на пару з IDA.
робляться активні спроби зіпсувати своє життя остаточно
Це нерозважливо, і не робить гарної репутації. Через деякий час тобі за це буде соромно.
Ні, а яке тут може бути раціональне рішення? Заколоти свого суперника на дуелі?
Гідніше буде порівняти себе з ним, та зробити висновки, і діяти далі. Будь настирливим, відбий.
Записатися на курси пікапу
Хібащо підняти своє "почуття власної важливості" за допомогою подібного егоїзму: все таки краще за завантажене з інету порно))
Усіх гарних дівчат розібрали, коли ти ще не знав про їх існування.
В чому проблема? "Вбирайся жирком" по життю, і гоу розбирати дівчат з молодшого покоління.
А ще кажуть, що чоловіки бездушні скотиняки
сильним мотиватором для його повернення до нормального стану
Не вправляє. Йдеш у віртуальний запой, скачуєш півтерабайта якісної порнографії — і можна жити далі, як і до того…
Не сходиться Може то просто симпатія?
Мужики вирішують усі складнощі та непорозуміння, а не бухають і фапають на відредактовані в відеоредакторі до блиску чужі відео-цицьки.
Вибачайте, нічого особистого, але..
Назвімо його скромним хлопцем, який дуже відданий своїй роботі і/або друзям у мережі.
..це банальне задротство та надмірна боязнь (а якщо вона не так зрозуміє, а якщо засміє та ще подругам розповість, а чи гарнюня я і т.д.). Нафіга таке дівчині? Вони такі самі, зі своїми заморочками, тільки вони ще косметикою користуються, що дає +1 до самовпевненості. Ти повинен бути поводирем і задавати моду стосункам, сама впевненість, і все. Так, стрьомно, але пам'ятай, що нічого жахливого не трапиться від твоєї поведінки, думка інших - це лишень думка, це ніщо в наш час, світ і без тебе існував, і через якусь спідницю він не зміниться.
п.с. на доу ця тема дуже хвороблива, та кожен новий топік про "стосунки" просто рве усі рейтинги по кількості повідомлень, цікаво як тут буде
Так то ще янголятка Слабо на васм запостити? xD
Існує "excelsior jet" - на виході маємо оптимізований(?) екзешник без залежності в ролі jre, але він 3000$ коштує.
А по простому, то просто робите portable app, на пару з launch4j. Можна ще почаклувати з enigma virtual box.
Cyan написав:P.Y. написав:Вам справді потрібен хтось із шукачів дівчат за заданим критерієм? ))
і вам доброго вечора
а критерій-то який? затурканий програміст, який боїться сонячного світла?Назвімо його скромним хлопцем, який дуже відданий своїй роботі і/або друзям у мережі. Необхідно якось його повернути до нормального життя в реал, де нічого не відбувається, бо він там, фактично, не буває. Стосунки з дівчиною, яка відповідає його ідеалам (гарна, розумна, байдужа до грошей), були б сильним мотиватором для його повернення до нормального стану, але див. вище.
Коротше, з чого порадите почати реанімацію (тільки не з лоботомії та евтаназії)?
Візьмешся за розум тоді, коли вона вийде заміж за іншого: подібне сильно вправляє мізки, але пізно.