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

 eXeL@B —› Вопросы новичков —› WSASend в стеке
Посл.ответ Сообщение

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

Создано: 01 июля 2011 00:10
· Личное сообщение · #1

Привет, прошу подсказать по функции WSASend - где она держит данные для отправки, фрагмент стека при остановке на её вызове:

Code:
  1. ESP
  2. 0012ECC8   00000594  |Socket = 594
  3. 0012ECCC   0012ECFC  |pBuffers = 0012ECFC
  4. 0012ECD0   00000001  |nBuffers = 1
  5. 0012ECD4   0012ECF8  |pBytesSent = 0012ECF8
  6. 0012ECD8   00000000  |Flags = 0
  7. 0012ECDC   200F14E0  |pOverlapped = 200F14E0
  8. 0012ECE0   00000000  \Callback = NULL
  9. 0012ECE4   0255CF30
  10. 0012ECE8   00000000
  11. 0012ECEC   0255CD00
  12. 0012ECF0   00000000
  13. 0012ECF4   0255CD00
  14. 0012ECF8   00000000
  15. 0012ECFC   000003F0
  16. 0012ED00   208A5010
  17. 0012ED04   0255CE00
  18. 0012ED08   0255CF30
  19. 0012ED0C   000003F0
  20. 0012ED10   006D83C0  RETURN to Client.006D83C0


если я правильно понял описание функции с MSDN http://msdn.microsoft.com/en-us/library/ms742203%28v=vs.85%29.aspx , то pBuffers содержит указатель на массив данных (пакет), но где найти сам пакет, как узнать это из указателя?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 01 июля 2011 00:23 · Поправил: neomant
· Личное сообщение · #2

0012ECCC 0012ECFC |pBuffers = 0012ECFC // указатель на массив структур WSABUF
0012ECD0 00000001 |nBuffers = 1 // количество таких структур

сама структура
0012ECFC 000003F0 // длина буфера
0012ED00 208A5010 // указатель на буфер

смотри передаваемый буфер по адресу 208A5010

-----
Следуй за белым кроликом




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

Создано: 01 июля 2011 00:35 · Поправил: ohos
· Личное сообщение · #3

1. а по адресу 208A5010 находится сам пакет или иные данные?

2. пожалуй глупый вопрос, но где адрес 208A5010 нужно искать в (дампе, стеке, коде)?

3. чтобы не блуждать вокруг напишу, что моя конечная цель найти место в коде программы где она берет введенные на экране данные, шифрует, передает WSASend для отправки серверу - правильно ли я выбрал путь "реверс WSASend" или есть более простой способ?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 01 июля 2011 09:57
· Личное сообщение · #4

1. Да, по этому адресу находятся именно передаваемые данные.
2. Это хоть и какой-то подозрительный, но адрес в памяти. Смотреть нужно под отладкой при бряканье на WSASend.
3. WSASend уж точно реверсить не стоит. Можно её использовать как отправную точку и копать назад: какие и откуда ей передавались данные для пересыли. Вашу задачу можно решить и более простыми спосабами, например, перехватом функций получения данных с контролов.

-----
Следуй за белым кроликом





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 01 июля 2011 14:59 · Поправил: ARCHANGEL
· Личное сообщение · #5

neomant
А можно подробнее про перехватом функций получения данных с контролов.?

Добавлено
Понятно.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 01 июля 2011 15:04
· Личное сообщение · #6

я имел в виду бряки на GetWindowText и ей подобные.

-----
Следуй за белым кроликом




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

Создано: 01 июля 2011 21:28 · Поправил: ohos
· Личное сообщение · #7

GetWindowText и многие другие "стандартные" решения попросту не сработают, ведь интерфейс программы написан на lua + xml

neomant пишет:
1. Да, по этому адресу находятся именно передаваемые данные.


а как понять, до какого момента с начала 208A5010 будет идти пакет?

offtop у меня есть возможность в программе в нужном месте вызывать функцию возвращающую время в секундах с момента запуска компьютера, какую Win API можно брякнуть для этого?

и еще один вопрос, как на ассемблере может выглядеть псевдо (lua) код

local a = 0
a = a + 11
a = a + 11
a = a + 11
a = a + 11
a = a + 11
a = a + 11

? так как в нужном месте программы я тоже могу его подсунуть




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 01 июля 2011 22:53 · Поправил: neomant
· Личное сообщение · #8

а как понять, до какого момента с начала 208A5010 будет идти пакет?
0012ECFC 000003F0 // длина буфера
0012ED00 208A5010 // указатель на буфер

ohos пишет:
какую Win API можно брякнуть для этого?

Code:
  1. DWORD WINAPI GetTickCount(void);

ohos пишет:
как на ассемблере может выглядеть псевдо (lua) код

На ассемблере это будет выглядеть как интерпретатор интерпретирующий (каламбур) скрипт LUA.
Если цель разобрать алгоритм шифрования, то лучше не доходить до Win32 API, а ковырять исходник на LUA, скорее всего в нём происходит шифрование и отправка.

-----
Следуй за белым кроликом




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

Создано: 01 июля 2011 23:03 · Поправил: ohos
· Личное сообщение · #9

neomant пишет:
Если цель разобрать алгоритм шифрования, то лучше не доходить до Win32 API, а ковырять исходник на LUA, скорее всего в нём происходит шифрование и отправка.


это конечно тоже было бы круто, но цель иная - найти место в котором данные отдаются на формирование пакета и подменить их, но вся сложность в том, что псевдо исходник луа грузится динамически, т.е. сама программа написана фактически на C/C#/C++ точно не знаю на каком из них



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

Создано: 04 июля 2011 21:11 · Поправил: ohos
· Личное сообщение · #10

я решил не создавать отдельную тему и спросить в этой же вопрос прямо относящийся к WSASend, а он таков:

если в WSASend "данные" уже попадают в виде пакета, то как эти самые данные ранее собираются обычно в пакет?

1. для этого есть готовые Win API, можно узнать названия?
2. подобный функционал пишут сами, как он обычно выглядят на ASM?

p.s. возможно Win API я уже нашел и это WSABUF http://msdn.microsoft.com/en-us/library/ms741542%28v=vs.85%29.aspx , уж слишком сильно строчка похожа на то, что надо:
Code:
  1. char SendBuf[1024] = "Test data to send.";


но как в неё передаются множественные данные? например сразу и строка, и число и булевые например...




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 04 июля 2011 22:02
· Личное сообщение · #11

ohos пишет:
1. для этого есть готовые Win API, можно узнать названия?

Можно посмотреть на GetWindowText, GetDlgItemText, GetDlgItemInt
ohos пишет:
2. подобный функционал пишут сами, как он обычно выглядят на ASM?

На асме это будет выглядеть как интерпретатор Lua и я не уверен, что копание в нём решит поставленную вами задачу.
ohos пишет:
но как в неё передаются множественные данные? например сразу и строка, и число и булевые например

Не вижу причин для непонимания. Передаём в одном буфере строку, за которой идёт число, за которым булевый тип.

Возможно изначальный посыл неверный? Неплохо для начала выяснить на чём писалось приложение, потом соответственно выбрать инструментарий и методы.
Давайте ссылку на пациента, возможно сможем что-нибудь более толковое посоветовать.

-----
Следуй за белым кроликом




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

Создано: 04 июля 2011 22:33
· Личное сообщение · #12

neomant пишет:
Можно посмотреть на GetWindowText, GetDlgItemText, GetDlgItemInt


попробую, но из-за того, что интерфейс игры написан на lua + xml, думаю это может не сработать

имеется mmorpg игра Runes of Magic (программа) в которую встроен интерпретатор lua + xml кода, таким образом весь интерфейс игры написан на таких файлах

PEID сказал про игру: http://imglink.ru/show-image.php?id=9b36e7965d471ca84896df3e49ed9b03

игра весит 4 гига, скачать можно тут http://rmonline.ru/download/client/ , либо с торрентов http://rutracker.org/forum/viewtopic.php?t=2806944 (с бесплатной регистрацией), http://rutor.org/torrent/106631 (без регистрации)




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 04 июля 2011 23:06
· Личное сообщение · #13

Да, размер впечатляет. Могу вам только посоветовать поискать в экзешнике такие строки: curl, ssl, zlib.

-----
Следуй за белым кроликом




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

Создано: 04 июля 2011 23:44
· Личное сообщение · #14

нашел все строки через олли Search for > All referenced text strings:

c curl там нет ничего, с ssl только две строки

Code:
  1. ASCII "asio.ssl"
  2. "asio.ssl error"


с zlib было только

Code:
  1. ASCII "zlib memory error"
  2. ASCII "zlib version error"
  3. ASCII "Unknown zlib error"


это что-то дает? хотя в папке с игрой есть дллки curllib, zlib, zlib1




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 05 июля 2011 00:10
· Личное сообщение · #15

ohos пишет:
это что-то дает? хотя в папке с игрой есть дллки curllib, zlib, zlib1

Да, даёт и многое. Т.е. уже наверняка не придётся копать WSASend, а почитать ман по curl. Посмотреть импорт в экзешнике по curl. Ман по boost::asio пригодится.

-----
Следуй за белым кроликом




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

Создано: 05 июля 2011 00:55
· Личное сообщение · #16

offtop: обязательно посмотрю их, а они отвечают за взаимодействие с текстом или его передачу с рамок? а вообще попробую поискать реализацию перехвата :GetText() метода в xml, ведь именно он вытаскивает там текст из рамки и уже передает в С++ основному коду игры




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 июля 2011 02:00
· Личное сообщение · #17

ohos пишет:
ель иная - найти место в котором данные отдаются на формирование пакета и подменить их

реверсите екзешник
учитывая что строки boost asio ssl, то найти сетевой обработчик будет легче
а от него уже ищите/разбирайте остальной алго
зная точку в программе откуда данные появляются, и имея разобраный сетевой обработчик
уже можно не только то что вы хотите сделать, но и отдельно крипто алго разобрать

ohos пишет:
имеется mmorpg игра Runes of Magic (программа) в которую встроен интерпретатор lua + xml кода, таким образом весь интерфейс игры написан на таких файлах

ну и пусть, вам ведь место появления данных найти нужно, а это наверняка функция в exe или dll самой игры
вообщем наверняка там где и функция WSASend, а может и просто send




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 05 июля 2011 13:33
· Личное сообщение · #18

ohos пишет:
а они отвечают за взаимодействие с текстом или его передачу с рамок

CURL является высокоуровневой оберткой для низкоуровневых функций работы с сокетами. Так что надо копать в сторону враппера CURL библиотеки ИМХО.

-----
Yann Tiersen best and do not fuck




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

Создано: 05 июля 2011 14:49 · Поправил: ohos
· Личное сообщение · #19

сразу прощу прощения за очередной оффтоп:

из-за того, что интерфейс игры написан на lua + xml и вдобавок эти файлы можно легко изменять, я могу поставить встроенную в игру функцию TakeScreenshot() сразу же перед вызовом нужной мне в исходном коде интерфейса написанном на lua, TakeScreenshot() делает обычный снимок экрана, затем записывает его в .bmp файл в папку screenshots расположенную в папке игры, не проще ли будет в таком случае через перехват вызова обычных Win API с созданием файла или съемкой экрана после этого просто продолжить трассировку и попасть в нужную функцию идущую сразу за TakeScreenshot() ?

можно узнать названия Win API отвечающих за создание файлов и создание снимка экрана?



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

Создано: 05 июля 2011 22:22
· Личное сообщение · #20

я уже нашел нужные API, но мои следующие вопросы уже касаются записи логов, поэтому думаю создать другую тему и уже в ней спрашивать про логи, все отписавшимся мои благодарности нубика


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


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