скрытый запуск teamviewer - отсосите, разрабы TV

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 8 Sep 2019.

  1. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Я после Айса терпеть не мог WinDBG, а потом так привык и думаю нахер бы он нужен был вообще Айс. Разве что для отладки компа за которым сидишь но... это в принципе актуально если комп у тебя только один. Когда их два - никаких проблем. Да даже на виртуалке все ок. Т.ч. Айс R.I.P.
     
  2. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Оля - няшка. Она все могет а если не могет - значит где-то уже есть версия которая это могет :)
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    из под виндбг я могу всё что захочется, единственный минус в его гуе - так это то что дампы памяти не обновляются в реалтайме.
    а все остальные проблемы решаются встроенными эвалуаторами что асма что с++, - и это заебись фича кстати, которая дружит с символами))
     
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    да лан)) ты гонишь - когда я с айсом познакомился - ты еще в подготовке в школе был же)))
    я тогда и понятия не имел зачем нужен отладчик, а тем более ядерный, - так просто - поставил с диска с радиорынка и почувствовал себя хакером))
     
  5. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Там не хватает скриптов. Были-бы скрипты - ты бы смог обновлять дамп на каждом шаге как нехрен делать. А так... ну две команды писать придется. И тем более не каждый же раз надо чекать что там изменилось... mov eax,ebx можно и пропустить :)
     
  6. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Чо в школе ? В 2001-м году где-то я был уже не в школе. Тогда я уже косил пары в универе и почитывал ксакеп, да :)
    Дрова правда начал писать значительно позже, год какой точно не вспомню, но Айс еще застал.
     
  7. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    А. Кстати Айс я первым и начал юзать. Про Оль всяких и знать не знал. Тогда развлечение состояло в том чтобы ставить bpx на MessageBoxA и там выискивать как надо крякнуть программу :)
    Кряк божественный, ничего не скажешь, но для нуба - это было прям пипец как круто !!! :)
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    чел, ты угараешь?)) пожалуй, не буду выёбываться - но вот тебе мой справочник с комментами

    Code:
    **** evaluating expressions - substituting dtx with ?? to expand type info
    0:000> ?? @@c++(head_list)
    struct _LIST_ENTRY * 0x777d01f4
     [ 0x533c98 - 0x539290 ]
       +0x000 Flink            : 0x00533c98 _LIST_ENTRY [ 0x533bb8 - 0x777d01f4 ]
       +0x004 Blink            : 0x00539290 _LIST_ENTRY [ 0x777d01f4 - 0x539140 ]
    
    
    
    **** evaluating expressions - @@c++(...) vs @@masm(...) identifier interpreting
    0:000> dv
                    __formal = 0x00400000
                    __formal = 0x00000000
                    __formal = 0x005943aa ""
                    __formal = 0n1
    pInMemoryOrderModuleList = 0x777d01f4 [ 0x593c98 - 0x59d478 ]
                   imagebase = 0
    0:000> dtx nt!_LIST_ENTRY @@c++(pInMemoryOrderModuleList)
    (*((nt!_LIST_ENTRY *)0x777d01f4))                 [Type: _LIST_ENTRY]
        [+0x000] Flink            : 0x593c98 [Type: _LIST_ENTRY *]
        [+0x004] Blink            : 0x59d478 [Type: _LIST_ENTRY *]
    0:000> dtx nt!_LIST_ENTRY @@masm(pInMemoryOrderModuleList)
    (*((nt!_LIST_ENTRY *)0x18ff30))                 [Type: _LIST_ENTRY]
        [+0x000] Flink            : 0x777d01f4 [Type: _LIST_ENTRY *]
        [+0x004] Blink            : 0x18ff80 [Type: _LIST_ENTRY *]
    
    
    
    **** evaluating expressions - when operand for debugger command required
    0:000> dtx ntdll!_LIST_ENTRY @@c++(pInMemoryOrderModuleList)
    (*((ntdll!_LIST_ENTRY *)0x777d01f4))                 [Type: _LIST_ENTRY]
        [+0x000] Flink            : 0x213c98 [Type: _LIST_ENTRY *]
        [+0x004] Blink            : 0x21d130 [Type: _LIST_ENTRY *]
    
    where pInMemoryOrderModuleList is a local var, that could be checked out with dv command
    
    ? - masm   basic expression
    ?? - c++   basic expression
    @@masm(...)   in-expression
    @@c++(...)   in-expression
    
    
    
    **** windbg doesnt update a memory views while int3 hit (all threads suspended)
    KUSER ticks updating, or another external wrtites to mem.
    
    
    
    **** windbg cant handle um access to memory from foreign process (thru NtWriteVirtualMemory etc) via ba bp
    
    
    
    
    **** HEAP info
    !heap with various parameters (use block sizes to detect most frequent allocs)
    
    
    
    **** display the SEH chain
    0:000> !exchain
    
    0018ffcc: ntdll!_except_handler4+0 (77f174a0)
      CRT scope  0, filter: ntdll!__RtlUserThreadStart+544f3 (77f2f253)
                    func:   ntdll!__RtlUserThreadStart+5453a (77f2f29a)
    0018ffe4: ntdll!FinalExceptionHandlerPad1+0 (77ec00a0)
    
    
    
    **** dg (Display Selector)
    0:000> dg fs
                                      P Si Gr Pr Lo
    Sel    Base     Limit     Type    l ze an es ng Flags
    ---- -------- -------- ---------- - -- -- -- -- --------
    0053 7ffdd000 00000fff Data RW Ac 3 Bg By P  Nl 000004f3
    
    
    
    **** break on SetWindowTextA by '*erio*' pattern
    bp user32!SetWindowTextA "$$<d:\\commands.txt"
    
    .if (poi(@esp+8) != 0) {as /ma ${/v:WndText} poi(@esp+8)} .else {ad /q ${/v:WndText}}
    .if ($spat(@"${WndText}", "*erio*") == 0){ gc } .else {.echo WndText}
    
    
    
    **** eb @$peb+2 00 Windbg break-in flaw
    ntdll!DbgUiRemoteBreakin and/or other internals (WinDbg COM supplied interface)
    calls this(or some) where PEB::IsDebuggerPresent is checked to follow with INT3
    
    
    
    **** walk thru frames in disassembly
    .f+
    .f-
       or:
    k
    .frame N
    
    
    
    **** menu item logging (bp on wndproc, rdx=uMessage r8=wParam (WM_COMMAND==0x111))
    bp 00007ff6`31451820 ".if @rdx==0x111 {.printf \"ITEM_ID %08x\\n\", @r8;gc} .else{gc}"
    
    
    
    **** heap leak (TODO: gc symantics)
    0:000:x86> bp MSVCR80D!free ".printf \"%08x free\\n\", dwo(esp+4);gc"
    0:000:x86> bp MSVCR80D!malloc "bp /1 @$ra \".printf \\\"%08x malloc\\\\n\\\",eax;g\";g"
    0:000:x86> g
    ...
    008d3f80 malloc
    008d1190 malloc
    008d11d8 malloc
    008d1220 malloc
    008d1268 malloc
    008d3f80 free
    008d1190 free
    008d11d8 free
    008d1220 free
    ntdll!NtTerminateProcess+0xa:
    
    
    
    **** stack
    !uniquestack - show all stacks excluding duplicates
    !findstack Symbol - locate all stacks that contain Symbol or module
    
    
    
    ***** verbose and recursive dump type info with sizes
    0:000> dt-v-r windowsproject1!_MY_TYPE
    
    
    
    **** sizeof (c++ eval)
    ?? sizeof(_IMAGE_NT_HEADERS64)
    
    
    
    **** step into to leave address bound
    0:000> .while(1){t;.if(@rip>0x7ff771a8f000){.break}}
    
    
    
    **** handle info
    !handle hnd
    
    
    
    **** CLR .Net
    sxr
    sxe ld clr.dll
    g
    //тут ждём окончательной прогрузки CLR.DLL например как завершится заполнение IAT итд
    
    .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
    .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll
    
    // а можно заюзать путь в %Path% и .loadby sos clr
    
    // а также:
    bp $iment(mscoree) ".loadby sos clr;bc*;.chain"
    bp $iment(mscoree) ".if (@rdx == 2) {.loadby sos clr;bc*;.chain;} .else {gc;}"
    
    // или
    sxe -c ".loadby sos clr;sxn -c \"\" ld clr;.chain" ld clr
    // или
    sxe ld clr
    g
    .loadby sos clr
    //
    //формат: !DllName.ExportFunc
    0:008> !sos.t
    ThreadCount:      3
    UnstartedThread:  0
    BackgroundThread: 2
    PendingThread:    0
    DeadThread:       0
    Hosted Runtime:   no
    
    
    
    **** kernel connect
    windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect
    
    
    
    **** initial break
    sxe ld ntdll
       - breaks on return from syscall ntdll!NtMapViewOfSection for specified module
       - at this point:
           - IAT not filled
           - relocs not applied
           - TLS not invoked
    
    
    
    
    **** multiple child procs with specified module
    // list processes with ids 0..4, attach and look for module xul*
    .foreach /s (id "0 1 2 3 4"){.echo id; | id s; lmm xul*;.echo --------------------------------------------}
    
    
    
    **** entrypoint
    0:000> bp $iment(768a0000)  <-- макрос получающий адрес EP
    0:000> bp $iment(ws2_32)  <-- макрос получающий адрес EP
    
    
    
    **** general
    !analyze -v
    |~[PID]s   //set process (debugging childs etc)
    ~Ns       //set thread (in thread list index. not a TID)
    
    
    
    **** UM EXCEPTIONS
    PAGEKD:005C93FB                 push    offset aNoumex  ; "NOUMEX"
    PAGEKD:005C9400                 push    eax             ; char *
    PAGEKD:005C9401                 call    _strncmp
    PAGEKD:005C9406                 add     esp, 0Ch
    PAGEKD:005C9409                 test    eax, eax
    PAGEKD:005C940B                 jnz     short loc_5C9414
    PAGEKD:005C940D                 mov     _KdIgnoreUmExceptions, 1
    
    
    
    **** list IAT
    0:000> !dh 400000
    ...
           0 [       0] address [size] of Bound Import Directory
        3000 [      3C] address [size] of Import Address Table Directory
           0 [       0] address [size] of Delay Import Directory
    ...
    0:000> dps 400000+3000 L3C/4
    
    
    
    **** no memory at target address
    .pagein /p EProcess addr
    
    
    
    **** expand type info for object at address(-b - recursive)
    kd> dt nt!_ETHREAD -b Addr
    
    
    
    **** display process threads and stacktrace for them, then attach to specific thread
    kd> !process EProcess 6
    kd> .thread /p /r EThread (now registers available)
    set bp:
    kd> bp /t EThread (/p EProcess) Addr
    
    
    
    **** breakpoint on line
    .lines -e
    bp (@@masm(`main.c:8+`))
    
    Optionally, you can load the source file in WinDBG, set the cursor to the line you want to set a breakpoint to, and hit F9.
    
    
    
    **** conditional breakpoints:
    bp kernel32!FindResourceW ".if poi(@esp+8) == 0x0000322A {} .else {gc}"
    bp mydriver!myFunction ".if (@eax & 0x0`ffffffff) == 0x0`c0004321  {} .else {gc}"
    
    bp kernel32!CreateFileW "du poi(@esp+4);kv;gu;? @eax; g"
    > display arg in unicode, display stack backtrace, complete exec and show result in EAX
    
    bp ntdll!LdrxCallInitRoutine ".if poi(@esp+0xc) == 0x00000001 {} .else {gc}"
    > breakpoint on DLL_PROCESS_ATTACH
    
    bp csgohack+0x12345 "r @$t5 = poi(@ebp-3c); .if @$t5 >= 1 & @$t5 <=64 {} .else{? @$t5;gc}"
    > bp on the range of local variable value
    
    
    
    **** conditional breakpoint with scriptfile
    bp advapi32!RegOpenKeyExW "$$<c:\\commands.txt"
    
    And then create c:\commands.txt with the following contents:
    .if (poi(esp+8) != 0) { as /mu ${/v:SubKey} poi(esp+8) } .else { ad /q ${/v:SubKey} }
    .if ($spat(@"${SubKey}", "Foo*") == 0)  { gc } .else { .echo SubKey }
    
    
    
    **** disassemble pointer
    uf poi(@fs:[c0])
    
    uf /c show calls
    uf /c /o show calls and sort as they appears in func code
    
    
    
    **** memory info
    !address addr
    !vprot addr
    !heap
    
    
    
    **** logged on user info
    !kuser
    
    
    
    **** bp on sourcecode
    bp source.c:12
    Optionally, you can load the source file in WinDBG, set the cursor to the line you want to set a breakpoint to, and hit F9.
    
    
    
    **** search
    s 0 L?7FFFFFFF 64 ff 15 c0 00 00 00
    s-b 00007ffb`2ae10000 L4c44000 41 57 41 56 41 55 41 54 56 57 55 53 48 83 ec 68 0F 29 74 24 50 4D 89 CC 4D 89 C6 48 89 D6 49 89
    
    
    
    **** symbols
    x module!*       -list all symbols in module
    ln addr           -list nearest
    .sympath+ srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
    .reload /f mod_name
    
    
    
    **** operations
    poi()           -dereference pointer
    
                   -string strstr
    
    **** my crazy ideas
    bp ntdll!LdrpCallInitRoutine -bp when LoadLibrary calls DllMain
    
    
    
    ****
     n (Set Number Base)
    
    
    **** kernel to usermode breakpoint
    0: kd> !process 0 0 notepad.exe
    PROCESS fffffa8012256980
        SessionId: 1  Cid: 0990    Peb: 7f72f0bf000  ParentCid: 07ac
        DirBase: 1babb8000  ObjectTable: fffff8a007c7a040  HandleCount:  68.
        Image: notepad.exe
    0: kd> .process /i fffffa8012256980 (Go required)
    
    ( .process /p fffffa8012256980 - not requires Go to switch context + safe in multicore mode)
    ( /r - reload usermode syms )
    
    0: kd> g
    3: kd> .reload
    3: kd> bp /p fffffa8012256980 ntdll!ntcreatefile
    3: kd> g
    
    
    
    **** memory dump
    .writemem c:\temp\string_content.txt 0x0d900024 L?005f7a1c
    
    
    
    **** PE header and sections info
    !dh baseaddr
    
    
    
    **** kd set register context
    !process
    .thread
    
    
    
    **** kd query current thread
    0: kd> r @$thread
    $thread=fffff80002c02cc0
    
    TID:
    0: kd> ?? @$thread->Cid
    
    
    
    **** execution control
    ~n (Suspend Thread)
    ~m (Resume Thread)
    ~f (Freeze Thread)
    ~u (Unfreeze Thread)
    
    
    
    **** list thread callstack (um)
    ~*k
    
    
    
    *** bp on WM_MESSAGE
    // if MSG::message == 0x666
    bp USER32!DispatchMessageW ".if poi(poi(@esp+4)+4) = 0x666  {} .else {gc}"
    
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    там правда школотронства сперва немало, не смейся))
     
  10. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Гагой порядочный господин, справочник себе намутил :)
    Я пытался сие совершить раз 5 но забил. У них help нормальный в принципе, так что к нему обращался пока не запомнил что-то. Щас уже не вспомню вообще нихрена наверное.

    Не, я совсем даже и не против того что командный режим повеселее чем тыцкать в окошки и команд там овер дохрена на все случаи жизни.
    Но просто какбэ сложно объяснить в чем суть скрипта если ты не привык их юзать. Имеется ввиду что ты буквально на лету можешь что-то тестить, где-то что-то патчить, компилить какой-то код и делать трассировку и все одной кнопкой. Ну т.е. в этом есть свои удобства и весьма существенные. Т.е. можно патчить и не скидывать дамп на винт чтобы потом опять заново грузить, искать где ты там что-то патчил... а если ошибся - процедуру надо повторять заново... и весь этот геморой отметается одним маленьким скриптом который все делает за тебя.
     
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    я те кстати рекомендую - какими ни было изысками не оперируешь - дневник - это всё. просто без наркоты такие объёмы в голове попросту не удержать. это как линкер, знаешь как работает? у него на входе куча говна, нагенерённая компилятором, и всё это надо объединить в один модуль и прочиее пиздецы, и он сжирает всю дозволенную динамическую память, после чего система валится в подкачку на винте, ну и короче говоря -боттлнек
     
  12. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Про линковку кстати пасиб за хорошую мысль :) Как-то не задумывался... надо затестить.

    Дневник... всмысле дневник ? Я когда что-то разбираю - обычно записываю в MindManager какой-нибудь из них. Там в виде дерева можно оформлять все эти изыскания и какбэ если надо запомнить какие-то адреса - туда их в соответствующую ветку. И сразу ясно к чему эти адреса вообще запоминал и что ожидал там найти. Как-то пробовал каждый адрес подписывать - но это слишком дохера времени уходит да и не нужно сие. Что-то такое общее набросал и все понятно относительно. Правда если сделать перерыв дня в 3-4 - все. Можно выбрасывать. Нихрена не понятно что там за херня понаписана :)
     
  13. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Вооот. А ежели это скрипт - то у тебя есть прям логическая структура. Т.е. до того момента до которого ты дошел - все вроде-как более-менее понятно. Только комментарии надо писать. Но все-равно... небольшой перерыв и все из головы вылетает.
     
  14. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    вот это зря - записывай то чем заморачивался. человеческая память - она охуенная штука. я например могу в один момент пересказать имена всех порноактрис на которых дрочил, а в другой момент - как отшибло. тоже самое и в изысканиях с кодингом - можно заснуть с одной идеей, а проснуться нихуя не помня(это я как пропитый алкаш говорю, у зожников вероятно всё не так) что исполнял. хотя это наверное уже пиздец моим мозгам))
     
  15. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Да я ушь сколько лет пытаюсь записывать - постоянно лень :) Но вообще забываю редко. Обычно я долгих перерывов не делаю, карахтер ебанутый. Пока не доделаю до какой-то логической точки как минимум - хрен успокоюсь. Праздников и выходных у меня все-равно не существует поэтому вроде-как не особо проблема с этим есть. За день - два не забываю обычно. Но вообще было-бы удобнее с нормальным логом действий, намного удобнее. Х/з. Может когда-нибудь в праздничный день свершится сея затея, но пока не выходит :)
     
  16. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    ой блин ну спасибо за чмаки-обнимаки, цем, цем, цем))) но такто тв при запуске дропится в Temp на венде, поэтому исходный код автоматичен и аутотентичен
     
  17. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Не ну а как... человек старался - надо и похвалить. А то критиковать это кажный может !!! :)
    Я ж те говорю узрел я FakeWndProc, получение списка тредов и думаю "ну походу Снег подменяет вендовую процЕдурку", потом где-то увидел шаманство с иконкой в трее - думаю точно, скрывает TV с глаз долой. Соответственно цель - создание вредоноса, соответственно TV лучше бы упаковать в ресурсы. Ну... в общем не в ту степь. Кто ж думал что идея совсем полностью другая :)
     
  18. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    да, хорошо что напомнил - ЛЕНЬ! она есть и если хочешь продуктивности - борись с ней всеми возможными методами. например - я начал изучать cppreference.com - почитал, нихуя не понял, отложил на завтра. но нет - остановиться не смог не добившись, а потом в голову себе вдалбливал, а потом поспишь когда - дак оно само заезжает вместе со всеми понятиями и деассемблированием. я понял одно - что если хочешь не просто знать, что на заборе хуй написано, а если хочешь разбираться - придётся работать над собой, примерно так как качки это делают в спортзале. регулярно. такие дела, бро)
     
  19. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,291
    Reputations:
    327
    слушай ну, ну фейспалм, ну бля, это совсем не то))
     
  20. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,091
    Likes Received:
    8,410
    Reputations:
    25
    Сколько пробовал - насильно нихрена не получается. Кодес пишется вяло, если вообще пишется. Как-то оно хреново получается когда насильно. Поэтому вот стараюсь как-то сделать так чтобы было кайфово и установить соответствующее "настроение". Короче все сложно, но вроде успехи имеются.