Ручной доступ к STRINGTABLE EXE

Тема в разделе "WASM.BEGINNERS", создана пользователем Rewos, 27 сен 2011.

  1. Rewos

    Rewos New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    10
    Всем привет. Сабж, интересует ручной метод, т.е. написать что-то вроде аналога LoadString. Помедитировал на exe'шник через HEX редактор, поводил глазами в ResHack, так понял, что кроме самих строк, где-то надо достать их размер, чтобы впоследствии удачно вытащить. (Еще заметил, что каждая запись отделяется от предыдущей 3-мя байтами, чаще что-то вроде 00h 17h 00h, редко второй байт выше 31, но это так, не думаю, что это важно, просто не имею опыта :) Получается каждая строка имеет свой десятичный идентификатор, как понимаю его-то и надо использовать... Подскажите что-нибудь, пожалуйста.
     
  2. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Обычно строки оканчиваются либо нулем, либо в конце длинна строки. Раньше еще знаком бакса терминировались. А сами строки где? В ресурсах или в секции данных? Или еще где?
     
  3. Rewos

    Rewos New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    10
    В ресурсах.
    Тут после каждого символа идет 0

    Код (Text):
    1. B:D910h: 6B 00 62 00 2F 00 73 00 65 00 63 00 1C 00 52 00  k.b./.s.e.c...R.
    2. B:D920h: 65 00 67 00 69 00 73 00 74 00 65 00 72 00 42 00  e.g.i.s.t.e.r.B.
    3. B:D930h: 69 00 6E 00 64 00 53 00 74 00 61 00 74 00 75 00  i.n.d.S.t.a.t.u.
    4. B:D940h: 73 00 43 00 61 00 6C 00 6C 00 62 00 61 00 63 00  s.C.a.l.l.b.a.c.
    5. B:D950h: 6B 00 3A 00 20 00 19 00 52 00 65 00 67 00 69 00  k.:. ...R.e.g.i.
    6. B:D960h: 73 00 74 00 65 00 72 00 69 00 6E 00 67 00 20 00  s.t.e.r.i.n.g. .
    7. B:D970h: 6E 00 65 00 77 00 20 00 6D 00 6F 00 6E 00 69 00  n.e.w. .m.o.n.i.
    8. B:D980h: 6B 00 65 00 72 00 3A 00 20 00 1A 00              k.e.r.:. ...
    Первый ресурс: "kb/sec"
    Второй: "RegisterBindStatusCallback: "
    между ними 00 1C 00
    и т.д.

    В редакторе ресурсов это выглядит так:


    Код (Text):
    1. STRINGTABLE
    2. LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    3. {
    4. 65264,  "kb/sec"
    5. 65265,  "RegisterBindStatusCallback: "
    6. 65266,  "Registering new moniker: "
    7. 65267,  "RevokeBindStatusCallback: "
    8. }
     
  4. Rewos

    Rewos New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    10
    Я так понимаю эти "нули" после символов зарезервированы на случай использования unicode? Тогда из моего примера 1Ch будет являться длиной строки "RegisterBindStatusCallback: ". Точно.
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Rewos
    Это и есть уникод. А первым символом идет длина строки.
     
  6. Rewos

    Rewos New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    10
    Как бы теперь найти в общей массе данных найти блок STRINGTABLE, в каждом отдельном exe можно найти сигнатуры на поиска начала и конца, но вот никакой универсальности не получается.
     
  7. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263