Author Topic: Dynamická analýza -DbUIRemoteBreakin ?  (Read 335 times)

Sheldon

  • Registered
  • *
  • Posts: 4
Dynamická analýza -DbUIRemoteBreakin ?
« on: December 28, 2014, 11:42:45 AM »
Popíši o co  se snažím, respektive čeho chci dosáhnout.
Mám program napsaný v Delphi 2006. V programu je "okno" v něm dvě pole pro jméno a kontrolní kód. Vyplní se pole jméno a program pak při vyplňování pole s kontrolním kódem kontroluje zda toto odpovídá zadanému jménu (nějaké forma kontrolního součtu). Pokud odpovídá aktivuje, jinak neaktivní, tlačítko. To co hledám je kód ověřující onen kontrolní součet a aktivující tlačítko.

První jsem zkusil statickou analýzu v IDA Pro 6.5, vlastně jsem v kódu hledal nějaký z řetězců vyskytující se v zájmovém okně. Bohužel toto nevedlo k výsledku.
Nezbilo než sáhnout po dynamické analýze, což je pro mě tak trochu španělská vesnice.
V IDA Pro jsem zpustil Local Win32 debugger a předpokládal jsem, že když po vyplnění obou výše popsaných polí program stopnu budu se moci krokováním dostat do kódu v programu, tedy do kódu ověřujícího "kontrolní součet".
Po vyplnění obou polí jsme program stopnul
Nacházím se však na ntdll_DbgUIRemoteBreakin  a nejdále kam se dokrokuji je k
Code: [Select]
ntdll.dll:7755FBED ntdll_NtQueryInformationThread endp ; sp-analysis failedna které se spustí program a ja jsemopět v poli pro vyplnění kontrolního součtu.

Poradíte polopatický jak se tohle řeší?
Libilo by se mi najit proměnné do kterých se uložil obsah dvou vyplněných polí a pak krokováním sledovat k jakému výpočtu se použili.
Ale beru cokoliv co najde kod v kterém se porovnává zadaný kontrolní součet s kontrolním součtem vypočteným programem, tedy kód, který aktivuje tlačítko na formuláři o kterém je řeč.


Sheldon

  • Registered
  • *
  • Posts: 4
Re: Dynamická analýza -DbUIRemoteBreakin ?
« Reply #1 on: December 31, 2014, 10:29:05 AM »
Tak se mi pomocí Delphi Decompiler podařilo najít funkci, která se pouští na událost Properties.OnChange v TcxTextEdit.
Bohužel se nedaří funkci odkrokovat , i když do ní umístím Breakpoint. Debugger se do funkce nevrátí, nevím zda to je protože se tato část pouští jako samostatné vlákno nebo díky DbUIRemoteBreakin.
V každém případě nevím co s tím?

Funkce je poměrně komplexní a má asi 8 úrovní vnoření a celé se to pouští minimálně 22x, pomalu mi přijde rychlejší útok hrubou silou.
Funkce na základě zadaného řetězce provádí cosi a pokud je po 22 provedeních cosi 0 je výsledek OK. Nějaká změna JZ na JNZ nepřipadá v úvahu.
Mohl bych ale vyzkoušet všech 10M možnosti a vytřídit tu která bude mít na konci cosi=0.
Potřeboval bych ale bud mít možnost z mého programu volat onu funkci v tomto exe nebo tuto funkci nějak jendoduše vypreparovat a i se všema jejíma sub funkcema jí vložit do svého prográmku.
Bohužel s ani jedním nemám zkušenosti.
Poradíte?







pr0p4g4nd4

  • [SCF]
  • Senior Member
  • ****
  • Posts: 429
Re: Dynamická analýza -DbUIRemoteBreakin ?
« Reply #2 on: January 02, 2015, 09:15:09 AM »
ak som to dobre pochopil, tak nejake tlacidlo sa aktivuje az potom ako zadas spravny kontrolny kod - teda predpokladam, ze sa necaka na nejake stlacenie potvrdzovacieho tlacidla, ktore z poli zoberie data a zisti ci je dany kod spravny - ale, ze ide o to, ze kod sa overuje vzdy ked nieco napises do pola kde je overovaci kod (tj overuje sa uz po zadani prveho znaku.. atd).

najjednoduchsie co mi napadlo, co by si mohol zvladnut je skratka to, ze dane vstupne data z poli budes hladat v pamati. v olly si das alt+m - kliknes niekde pravym mysidlom a das SEARCH (ctrl+b) - mozes dat hladat bud ascii alebo unicode. ak najdes, tak daj na to hwbp na access a musis dufat, ze ti to na nieco bude. :)

to, ze ti bp nebreakuje v kode, ktory ti zistil dd - dovodov moze byt milion. mozno by nebolo odveci dat nejake tie bp aj na adresy, ktora dany kod volaju. ako zistit, ktore to su? supni to do olly, stlac ctrl+g, tam slahni adresu tej overovacej procky - potvrd ENTERom. na danu adresu klikni pravym mysitkom a daj FIND REFERENCES TO/SELECTED ADDRESS (ctrl+r). tak najdi procky, ktore maju dany kod volat a daj bp niekde tam. snad tam niekde brejknes a zistis preco ti na overovacej procke debugger nebreakuje.

v delphi nie je nikdy nic jednoduche, tam aj uplne blbosti co by sa dali napisat na par riadkov kodu v asm su enskutocne zlozite (resp veci co boli kompilovane starsimi verziami delphi, je mozne, ze sa to u novsich nejako zlepsilo - aj ked pochybujem).

pises, ze to je nejaky kontrolny sucet - dufam, ze si skusal, ci to nie je nejaka zname hashovacie crypto. skus PEiD s pluginom KANAL, pripade Hash & Crypto Detector od AT4RE.

ps: eh, a takto, na debugger IDY sa vyser - rob vsetko v olly.
« Last Edit: January 03, 2015, 08:59:02 AM by pr0p4g4nd4 »
Aký je rozdiel medzi mladým a starým chlapom?
Mladému behá piča po rozume, starému po byte...

Kto robí je robot, kto koktá je.. koktavý!

DARKER

  • [SCF]
  • Administrator
  • Senior Member
  • *****
  • Posts: 336
Re: Dynamická analýza -DbUIRemoteBreakin ?
« Reply #3 on: January 02, 2015, 08:55:25 PM »
Najskor by som skusil http://kpnc.org/idr32/en/ co si uz asi spravil, krasne ti identifikuje eventy a usetri cas s debugovanim, dokonca ti identifikuje vnutorne funkcie DELPHI co ti moze rapidne znizit pocet CALL-ov ktore musis identifikovat v tvojom algu. Vsetko dolezite sa da potom vyexportovat cez .map do IDA. Tam mozes postvat na danu funkciu decompiler, ktora ti to uz mozno skonvertuje rovno aj na "pseudokod". Popripade este mozes v IDA pouzit signaturu na DELPHI aby ti zjednosilo "pracu".
« Last Edit: January 02, 2015, 08:58:24 PM by DARKER »