Сейчас на форуме: (+3 невидимых)

 eXeL@B —› Дневники и блоги —› Mak Blog
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 31 июля 2008 18:39 · Поправил: mak
· Личное сообщение · #1


.386
.model flat, stdcall
option casemap:none
include w2k\ntstatus.inc
include w2k\ntddk.inc
include w2k\ntoskrnl.inc
include w2k\w2kundoc.inc
includelib w2k\ntoskrnl.lib
include Strings.mac
.data?
DeviceName dd ?
BaseAddress dd ?
.data
CreateProcess db "NtCreateProcess",0
SourceString dw 5ch
.const
CCOUNTED_UNICODE_STRING "\Device\ring0code", g_usDeviceName, 4
CCOUNTED_UNICODE_STRING "\??\ring0code", g_usSymbolicLinkName, 4

.code

_Shell proc Source:DWORD,ea
local ObjectAttributes:OBJECT_ATTRIBUTES
local hFile,hSection,ViewSize
local IoStatusBlock:IO_STATUS_BLOCK
push esi
xor esi,esi
;OBJECT_ATTRIBUTES
mov [ebp+ObjectAttributes.ObjectName],ea
mov [ebp+ObjectAttributes.Length], 18h
mov [ebp+ObjectAttributes.RootDirectory], esi
mov [ebp+ObjectAttributes.Attributes], 40h
lea edi, [ebp+ObjectAttributes.SecurityDescriptor]
InitializeObjectAttributes addr ObjectAttributes, addr g_usDirName,
OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL
invoke ZwOpenFile,100020h,addr ObjectAttributes,addr IoStatusBlock,FILE_SHARE_READ
mov hFile,eax
invoke ZwCreateSection,hSection,SECTION_ALL_ACCESS,addr ObjectAttributes,
0,PAGE_EXECUTE, SEC_IMAGE, hFile
invoke ZwMapViewOfSection,hSection,0FFFFFFFFh,BaseAddress,0,3E8h,0,addr ViewSize,1,100000h,4
ret
_Shell endp

_Ring proc RingApi:DWORD
invoke RtlInitUnicodeString,RingApi,addr SourceString
lea eax,RingApi
invoke _shell,offset SourceString,eax
ret
_Ring endp

_CachedMemory proc pDeviceObject:PDEVICE_OBJECT
local FastMutex:FAST_MUTEX

pushad
invoke MmAllocateNonCachedMemory,0FA0h
if eax!=NULL
mov BaseAddress,eax
.elseif
jmp close
.endif
push esi
xor esi, esi
push edi ; State
inc esi
push esi ; Type
push offset FastMutex.Event ; Event
mov FastMutex.Count, esi
mov FastMutex.Owner, edi
mov FastMutex.Contention, edi
call ds:KeInitializeEvent ; APC
mov edi, BaseAddress
mov ecx, 3E8h
mov edi, BaseAddress
mov ecx, 3E8h
xor eax, eax
rep stosd

close:
mov ebx, 0C0000001h
popad
ret
_CachedMemory endp

_DispatchControlIo proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP
mov eax,pIrp
assume eax:ptr _IRP
mov [eax].IoStatus.Status,STATUS_SUCCESS
;IoCompleteRequest
and [eax].IoStatus.Information,0
assume eax:nothing
invoke IoCompleteRequest,pIrp,IO_NO_INCREMENT;
xor eax,eax
mov eax, STATUS_SUCCESS
ret
_DispatchControlIo endp

DriverEntry proc uses ebx edi esi, pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local status:NTSTATUS
local pDeviceObject:PDEVICE_OBJECT
local DriverObject

invoke RtlInitUnicodeString,addr DeviceName,addr g_usDeviceName
mov esi,DriverObject
mov status,STATUS_DEVICE_CONFIGURATION_ERROR
invoke IoCreateDevice,DriverObject,0,addr g_usDeviceName,FILE_DEVICE_UNKNOWN,100,FALSE,addr pDeviceObject
.if eax!=STATUS_SUCCESS
jmp exit
.endif
mov eax,offset _DispatchControlIo
mov [esi+38h],eax
mov [esi+40h],eax
push offset g_usDeviceName
lea eax,offset g_usSymbolicLinkName
push eax
mov [esi+70h],offset _DispatchControlIo
mov [esi+34h],offset _DispatchControlIo
call RtlInitUnicodeString
invoke IoCreateSymbolicLink,addr g_usSymbolicLinkName,addr g_usDeviceName
.if eax == STATUS_SUCCESS
mov eax,pDriverObject
.elseif
invoke IoDeleteDevice, pDeviceObject
.endif
jmp GetHookApi

GetHookApi:
mov eax,offset pDeviceObject
add [eax+1Ch],7FH
invoke _CachedMemory
invoke _Ring,addr CreateProcess

exit: mov eax,STATUS_DEVICE_CONFIGURATION_ERROR
ret
DriverEntry endp
end DriverEntry


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 12.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 октября 2008 23:57
· Личное сообщение · #2

mak
А пароленг то какой?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 02 октября 2008 00:32
· Личное сообщение · #3

mak, там код цепляется за потоки ввода/ввывода что при перенасе на C++ зацепит весь STL. Плюс ещё zlib. Ты сможешь такой код использовать? (т.е. скомпилить в сделать copy/paste asm-a в свой проект не получится).




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 02 октября 2008 01:05
· Личное сообщение · #4

Да с этим все хорошо , на асм я и не хотел. Си код так и останется по плану

asser там очень сложно , пароль был чтобы не беспокоить лишний раз других. Если уж так прям любопытсво раздирает то не жалко конечно , пасс ник того кому предназначалось =)

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 02 октября 2008 01:07
· Личное сообщение · #5

mak... эээ, так ты в состоянии написать работу с С++ потоками? Если да, то переводи сам потоковые куски, а я тебе перепишу чичас шифрование....




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 02 октября 2008 01:38
· Личное сообщение · #6

время есть значит в состоянии , но перевести с явы для СТЛ я так понял не легко

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 02 октября 2008 04:19 · Поправил: s0larian
· Личное сообщение · #7

mak, легко, только это будет не перевод а новый код. Я поэтому и спрашиваю - как ты это будешь использовать не разобравшись в Си?...

Кста, странный код... писавший, похоже, имеет отдалённое представлении об ООП... Ну а на С++ это выглядит просто как код школьника:

Code:
  1.     class Quant{
  2.          private:
  3.                  int number_;
  4.                  std::vector<Quant> list_;
  5.                  int result_;
  6.          public:
  7.                  void addQuant(const Quant &q) {
  8.                         list_.push_back(q);
  9.                  }
  10.                  int Decode() {
  11.                         result_ = number_;
  12.                         std::vector<Quant>::iterator it = list_.begin();
  13.                         for (; it != list_.end(); ++it) {
  14.                               Quant &= *it;
  15.                               result_ += q.getValue();
  16.                               result_ %= 256;
  17.                         }
  18.                         return result_;
  19.                  }
  20.                  int Encode() {
  21.                         result_ = number_;
  22.                         std::vector<Quant>::iterator it = list_.begin();
  23.                         for (; it != list_.end(); ++it) {
  24.                               Quant &= *it;
  25.                               result_ -= q.getResult();
  26.                               result_ = (result_ + 256) % 256;
  27.                         }
  28.                         return result_;
  29.                  }
  30.                  int getResult() {
  31.                         return result_;
  32.                  }
  33.                  void setValue(int value) {
  34.                         number_ = value;
  35.                  }
  36.                  int getValue() {
  37.                         return number_;
  38.                  }
  39.          };


mix.java не скомпилить, т.к. там используется какой-то "Randomize"...


Вот тебе главная часть Crypt - дальше всё то же самое...

Code:
  1.          class Crypt {
  2.          private:
  3.                  static const int block = 256;
  4.                  static const int keylen = 9;
  5.                  int counter;
  6.                  std::vector<Quant> keys, values, shuffles;
  7.          public:
  8.                  Crypt() : counter(0)
  9.                  {
  10.                         keys.reserve(keylen);
  11.                         for (int i = 0; i < keylen; i++)
  12.                               keys.push_back(Quant());
  13.                         values.reserve(block - keylen);
  14.                         shuffles.reserve(block - keylen);
  15.                         for (int i = 0; i < block - keylen; i++) {
  16.                               values.push_back(Quant());
  17.                               shuffles.push_back(Quant());
  18.                         }
  19.                         std::vector<Quant>      allquants;
  20.                         allquants.reserve(block);
  21.                         for (int i = 0; i < block; i++)
  22.                               allquants.push_back(Quant());
  23.                         keys[0] = allquants[0];
  24.                         int n = 1;
  25.                         int v = 0;
  26.                         int key = 1;
  27.                         for (int i = 1; i < block; i++) {
  28.                               if (== n) {
  29.                                    keys[key++] = allquants[i];
  30.                                    n *= 2;
  31.                               } else {
  32.                                    values[v++] = allquants[i];
  33.                               }
  34.                         }
  35.                         for (int i = 1; i < block; i++) {
  36.                               allquants[i].addQuant(allquants[0]);
  37.                               for (= 1; n < i; n++) {
  38.                                    if ((& n) == n) {
  39.                                        allquants[i].addQuant(allquants[n]);
  40.                                    }
  41.                               }
  42.                         }
  43.                  }
  44.                  void setKeyEncode(const std::string &key) {
  45.                         counter = 0;
  46.                         int keys[keylen];
  47.                         
  48.                         for (int i = 0; i < keylen; i++) {
  49.                               keys[i] = key[i] + 128;
  50.                               this->keys[i].setValue(keys[i]);
  51.                               this->keys[i].Encode();
  52.                         }
  53.                  }





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 02 октября 2008 12:56
· Личное сообщение · #8

=) а рандомиз ты же уже делал раньше , самый первый который. Да это уже другой вопрос , самое главное что можно будет скомпилить на Си , а далее уже можно ДЛЛ сделать и использовать стороне. Поэтому и попросил стримы тоже.

Это муодуль c.java и q.java ?

а вот рандомиз

Code:
  1. class Randomize { 
  2. private: 
  3.     int64 seed, multiplier;
  4.     static const int64 addend = 0xBL;
  5.     static const int64 mask = (1ull << 48) - 1;
  6.     bool haveNextNextGaussian;
  7. public: 
  8.     Randomize(int64 seed)  
  9.         : multiplier(0x5DEECE66DL), haveNextNextGaussian(false) 
  10.     { 
  11.         setSeed(seed);
  12.     } 
  13.     void setSeed(int64 seed) { 
  14.         seed = (seed ^ multiplier) & mask;
  15.         haveNextNextGaussian = false;
  16.     } 
  17.     int nextInt(int n) { 
  18.         if (n<=0) 
  19.             throw std::exception("positive");
  20.         if ((& -n) == n)  // i.e., n is a power of 2 
  21.             return (int)((* (int64)next(31)) >> 31);
  22.         int bits, val;
  23.         do { 
  24.             bits = next(31);
  25.             val = bits % n;
  26.         } while(bits - val + (n-1) < 0);
  27.         return val;
  28.     } 
  29.     int next(int bits) { 
  30.         int64 nextseed = (seed * multiplier + addend) & mask;
  31.         seed = nextseed;
  32.         return (int)(nextseed >> (48 - bits));
  33.     } 
  34. };


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



<< . 1 . 2 .
 eXeL@B —› Дневники и блоги —› Mak Blog
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати