|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
Собственно в описании в разделе Notes for developers on Visual Basic сказано буквально следующее: As Visual Basic compiler has some specifics, using of API functions with VB will differ from work with other compilers (such as Delphi, Visual C++). VB API currently consists of only 4 functions. Their calls are described as follows: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Эти 4 (ну крайнюю не пробовал - мне она не интересна) работают как заявлено. При этом API (описанных в разделе API description) как таковых там несколько сильно больше. Замечено 1) Названия тех же API для C++/Dephi отличаются Например вместо apiGetTrialDays описана GetTrialDays Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
2) Ну и есть другие, нек. из которых прямо скажем интересны Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Так вот, вопрос. Глядя на все это - имеется в виду примеры C-шных и Delphi кодов - нет ли способа таки задействовать эти не-VB-шные API? На основании здравой мысли, что если API есть, то она должна как-то вызываться из любого языка. Наплевав на фразу "VB API currently consists of only 4 functions"??? У меня не получилось. Вкратце о конкретной проблеме. Имеющиеся 4 VB-шные API ф-ции 1)дают ответ на вопрос есть ли лицензия 2) не отвечают на вопрос ИСТЕК ЛИ СРОК ЕЕ ДЕЙСТВИЯ Т.е. если KeyExpirationDate=1 Августа, то и 31июля, и 3 августа VB скажет что лицензия есть, но не скажет что срок истек. А временные лицензии иногда люди выпрашивают. Можно конечно использовать стандартную защиту. Т.е. когда триал закончился или Expiration Date наступил, при запуске выводится стандартный Msgbox и на этом работа заканчивается. Но это 1) некрасиво 2) программа вообще не запустится, а у меня заготовлено так что ключ вводится через основной exe-шник. (В предыдущей проге были раздельные модули). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2013, 21:45 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
Дмитрий77, по идее API должны быть написаны так, чтобы их можно было вызвать из программы на любом языке (и с использованием любой run-time library), поддерживающем данные соглашения вызова. Но, возможно, специфика ASProtect такова, что при вызове своей API она должна определять, какой компилятор/RTL был использован для создания защищаемого модуля. "Не получилось" что/как именно? P.S. Вика говорит, что "в настоящий момент защита программ, защищённых ASProtect, обходится". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2013, 17:01 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
13-й квартал, Не получилось вместо Код: vbnet 1.
(как у них в документации по VB6) написать и как-то это использовать, т.е. получить результат Код: vbnet 1.
(как "следует" из документации по C++) И думаю не получится. Я думаю это абсолютно разные API с абсолютно другими механизмами. Я накатал тестовый примитивный Win32 Console exe в C++ и он полностью рабочий: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
Т.е. идея такая: при запуске защищенного exe, Asprotect сам вызывает свои "API" c нужными аргументами и при исполнении (см. код) эти аргументы сохраняются в независимых переменных в программе, и программа знает UserName,KeyExpireDay и т.п. И сдается мне, в VB6 такой механизм просто не работает. А что касается VB-шных 4-рех API, они вызываются из программы пользовательским кодом. Код: vbnet 1. 2. 3.
в режиме вопрос-ответ. В VB-шных API проблема с пониманием лицензии с "Expiration Date" Т.е. если Expiration Date = "1 августа", а лицензия на имя "Vasja" то C-шный (см. выделенные строчки) код 30 июля будет выдавать: Код: plaintext 1. 2.
а 2 августа выдаст Код: plaintext 1. 2.
Т.е. по сути у меня аж 2 ф-ции (GetKeyExpirationDate -могу сравнить с тек. датой и GetRegistrationInformation -пустое имя означает что лицензии нет или она истекла) чтоб понять что лицензия истекла А в VB6 у меня единственная ф-ция Код: vbnet 1. 2. 3. 4. 5. 6. 7.
И мало того что я не знаю KeyExpire = 01.08.2013, так эта ф-ция еще и не работает правильно, т.е. VB6 30 июля будет выдавать Код: vbnet 1.
и 2 августа будет выдавать Код: vbnet 1.
Невозможно различить ВРЕМЕННАЯ ЛИЦЕНЗИЯ ЕЩЕ ДЕЙСТВИТЕЛЬНА и СРОК ВРЕМЕННОЙ ЛИЦЕНЗИИ ИСТЕК. Т.е. временный ключ воспринимается как постоянный. По идее я могу запускать C-шный exe шник и возвращать недостающую информацию в VB6 Либо через return (ExitCode=число содержащее результат) Либо через return (ExitCode=Ptr на ячейку памяти где хранится структура с результатом) Вопрос: как из C(++) реализовать запись структуры в область памяти с указателем Ptr чтоб не стерлось при выходе из программы? Либо надо преобразовать C++.exe в C++.dll, наделить эту dll API-ф-цией GetLicence(...) и вызывать тупо из VB6. Но здесь потенциальная проблема: надо чтоб при вызове GetLicence(...) из dll автоматически исполнялись ф-ции защиты, которые сбрасывают нужные значения в UserName, KeyExpire и т.д. в переменные внутри dll (как это делает exe-шник код которого выше) чтоб моя API смогла их вернуть. Вопрос: как сделать такую dll? Содержащую API кот. можно вызвать из VB6? Простенький пример? Но. Есть проблема. То о чем я пишу, НЕ ЗАЩИЩЕНО. Т.е. exe или dll тупо подменяется "ломаным вариантом", кот. возвращает через return или через API желаемый результат вместо настоящего(содержащего статус лицензии). Вопрос: как проверить, что exe-шник кот. я запускаю или dll из кот. я вызываю API именно МОИ РОДНЫЕ а не ХАКЕР ПРОДАКШН? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2013, 21:37 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
Ну DLL-ку я сделал, долго мучился пока с .def файлом не разобрался: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Т.е. "недостающие" API вызываются в С++, а C++ отдает инфу в VB6 для чего я написал свои API ("обычные"). Из VB я вызываю свои API: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Но открытым тогда остается вопрос защиты этого обмена: Вопрос: как проверить, что exe-шник кот. я запускаю или dll из кот. я вызываю API именно МОИ РОДНЫЕ а не ХАКЕР ПРОДАКШН? Т.е. dll -только подстраховка - уточнение информации (на случай временной лицензии чтоб отсекать ее Expiration Date). И exe, и dll защищены. Но теоретически остается возможность подменить dll на "с такими же ф-циями и таким же именем" и влить в exe-шник неправильный Expiration Date. Моя идея - из exe-шника проверить файл dll на валидность, и если что не так, то вызовы к ней не производить, лицензию считать отсутствующей и функционал не запускать. Как сделать? На языке вертится MD5. Могу подписать Dll Microsoft-овской подписью (реальной). Тогда вопрос: как проверить что dll суть подписанный правильной подписью файл? С другой стороны, все ключи привязаны к железу. Временных ключей единицы. Предположить что кто-то выпросит временный ключ и потом будет ломать дату его окончания "чисто для себя".... Чет в это слабо верится. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2013, 04:58 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
Я пример с вычислением md5 файла нашел. Достаточно ли перед вызовом API проверить md5 вызываемой dll-ки и как и какой момент это лучше сделать? Т.е. чтоб не получилось, что моя лежит в папке с прогой, я проверяю md5 файла App.path\mydll.dll И прога тут же запускает левую dll лежащую где-то в System32. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2013, 05:47 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
Дмитрий77написать и как-то это использовать, т.е. получить результат Код: vbnet 1.
(как "следует" из документации по C++) И думаю не получится. Я думаю это абсолютно разные API с абсолютно другими механизмами. Так объявлять пробовал ? Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2013, 14:12 |
|
Вопрос по API ф-циям AsProtect если кто сталкивался или умеет использовать "сложные" API.
|
|||
---|---|---|---|
#18+
скукотища, пробовал, я кстати часть "своих" так на void переделал. Но это не поможет. Там эти API "неправильные" хитрые. Обрати внимание на документацию и на приведенный мной C-шный код. AsProtect-API не вызываются. Их надо вставить в код как void __declspec(dllexport) __stdcall . Т.е. как бы ты сам дописываешь что они делают. А фишка в том, что при запуске exe или dll Asprotect их сам вызывает с параметрами которые надо узнать. Они не возвращают то что надо узнать, они засовывают это в код. А я в отличии от AsProtect ответа не знаю и в лучшем случае запущу их их VB6 с нулями. На VB6 API делать можно? Насколько знаю нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2013, 17:10 |
|
|
start [/forum/topic.php?fid=60&fpage=56&tid=2156882]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 135ms |
0 / 0 |