Форум программистов, компьютерный форум, киберфорум
Python: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 19

Декомпиляция и компиляция двух apk

03.05.2021, 05:46. Показов 1128. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго нашёл тут скрипт немного подправил
https://github.com/funsecurity/apk_binder_script
apktool скачал 2.5.0 версии, начинаю делать по ману декомпил, smali и возникает ошибка.
Python
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
import subprocess
import random
from xml.dom import minidom
import os,re
from os import listdir
import shutil
import sys
import platform
import getopt
 
pwd = os.getenv("PWD", os.getcwd())
 
ANDROID_MANIFEST = "AndroidManifest.xml"
REPLACE_LOADER_PACKAGE = "net/funsecurity/apk/binder/Loader"
PATH_LOADER_SMALI = os.path.join("loader", "smali", "Loader.smali")
PATH_PROPERTIES_SMALI = os.path.join("loader", "assets", "loader.properties")
LOADER_PERMISSIONS = os.path.join("loader", "permissions.xml")
LOADER_RECEIVER = os.path.join("loader", "receiver.xml")
ACTION_MAIN = "android.intent.action.MAIN"
NO_COPY = \
    [
        os.path.join("smali", "android"),
        "AndroidManifest.xml",
        "apktool.yml",
        os.path.join(" ", "res", "")
    ]
 
 
 
def apk_bind(target_apk, bind_apk, class_bind):
 
    apktool_bin = config_apktool()
 
    #Nombre aleatorio de la clase loader
    loader_class = random_string_generator(8)
 
    '''
    APK Target
    '''
    print "[+] Process", target_apk, "..."
 
    #Directorio donde almacenar el apk objetivo
    target_dir_smali = os.path.join(""+pwd+"\\tmp", str(random.randint(100000, 999999)))
    
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
 
    #Decompilar apk objetivo
    subprocess.call([os.path.join("apktool", apktool_bin), "d", "-f", target_apk, "-o", target_dir_smali])
 
    #Obtenemos paquete base del apk objetivo
    target_package = get_package_manifest(os.path.join(target_dir_smali, ANDROID_MANIFEST), target_dir_smali)
 
    if target_package == None:
        print "[x] Problems, package target incorrect"
        sys.exit(1)
 
    #Parseamos paquete para obtener la ruta en el fs
    target_class_path = target_package.replace(".", "/")
 
    #Cambiamos la paqueteria en Loader.smali y lo copiamos en la ruta correcta
    prepare_loader_class(target_class_path, loader_class, target_dir_smali)
 
    #Cambiamos la clase a bindear y lo copiamos en la ruta correcta
    prepare_loader_properties(loader_class, target_dir_smali, class_bind)
 
    #Editamos el manifest destino estableciendo los permisos correctos y receiver
    prepare_loader_manifest(target_dir_smali, target_package, loader_class)
 
    print "[+]", target_apk, "processed"
 
    '''
    APK Binder
    '''
    print "[+] Process", bind_apk, "..."
 
    #Directorio donde almacenar el apk binder
    binder_dir_smali = os.path.join(""+pwd+"\\tmp", str(random.randint(100000, 999999)))
    
    if not os.path.isdir(binder_dir_smali):
     os.mkdir(binder_dir_smali)
     
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali) 
 
    #Decompilar apk binder
    subprocess.call([os.path.join("apktool", apktool_bin), "d", "-f", bind_apk, "-o", binder_dir_smali])
 
    #Copiamos todos los datos desde el apk a bindear al destino
    print "[+] Copy files from binder to target..."
    copy_files(binder_dir_smali, target_dir_smali)
 
    #Copiamos datos del manifest a bindear al destino
    print "[+] Merge manifest..."
    merge_manifest(os.path.join(binder_dir_smali, ANDROID_MANIFEST), os.path.join(target_dir_smali, ANDROID_MANIFEST), binder_dir_smali)
 
    print "[+]", bind_apk, "processed"
 
    '''
    Compiling
    '''
    #Compilar apk bindeado
    #subprocess.call([os.path.join("apktool", apktool_bin), "b", target_dir_smali, "--use-aapt2", "Bind_" + target_package + ".apk" ])
    subprocess.call([os.path.join("apktool", apktool_bin), "b", target_dir_smali, "--use-aapt2", "-o", ""+pwd+"\\lol.apk" ])
 
    #Eliminamos directorios temporales de trabajo
    shutil.rmtree(target_dir_smali)
    shutil.rmtree(binder_dir_smali)
 
    print "[+] Completed"
 
def smali_bind(target_apk, smali_bind):
 
    apktool_bin = config_apktool()
 
    #Nombre aleatorio de la clase loader
    loader_class = random_string_generator(8)
 
    '''
    APK Target
    '''
    print "[+] Process", target_apk, "..."
 
    #Directorio donde almacenar el apk objetivo
    target_dir_smali = os.path.join(""+pwd+"\\tmp", str(random.randint(100000, 999999)))
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
     
    #Decompilar apk objetivo
    subprocess.call([os.path.join("apktool", apktool_bin), "d", "-f", target_apk, "-o", target_dir_smali])
 
    #Obtenemos paquete base del apk objetivo
    target_package = get_package_manifest(os.path.join(target_dir_smali, ANDROID_MANIFEST), target_dir_smali)
 
    if target_package == None:
        print "[x] Problems, package target incorrect"
        sys.exit(1)
 
    #Parseamos paquete para obtener la ruta en el fs
    target_class_path = target_package.replace(".", "/")
 
    #Obtenemos paquete y clase del fichero smali
    path_smali_bind = get_smali_class(smali_bind)
     
    #Cambiamos la paqueteria en Loader.smali y lo copiamos en la ruta correcta
    prepare_loader_class(target_class_path, loader_class, target_dir_smali)
 
    #Cambiamos la clase a bindear y lo copiamos en la ruta correcta
    prepare_loader_properties(loader_class, target_dir_smali, path_smali_bind.replace("/", "."))
 
    #Editamos el manifest destino estableciendo los permisos correctos y receiver
    prepare_loader_manifest(target_dir_smali, target_package, loader_class)
 
    #Inseramos en el manifest destino el service smali
    prepare_smali_manifest(target_dir_smali, path_smali_bind)
 
    #Copiamos archivo smali en el directorio destino
    copy_smali_file(target_dir_smali, smali_bind, path_smali_bind)
 
    '''
    Compiling
    '''
    #Compilar apk bindeado
    #subprocess.call([os.path.join("apktool", apktool_bin), "b", target_dir_smali, "--use-aapt2", "Bind_" + target_package + ".apk" ])
    subprocess.call([os.path.join("apktool", apktool_bin), "b", target_dir_smali, "--use-aapt2", "-o", ""+pwd+"\\lol.apk" ])
 
    #Eliminamos directorios temporales de trabajo
    shutil.rmtree(target_dir_smali)
 
    print "[+] Completed"
 
def prepare_smali_manifest(target_dir_smali, path_smali_bind):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
    manifest = minidom.parse(os.path.join(target_dir_smali, ANDROID_MANIFEST))
    service = manifest.createElement("service")
    service.setAttribute("android:name", path_smali_bind.replace("/", "."))
    manifest.getElementsByTagName("application")[0].appendChild(service)
 
    #Guardamos
    fo = open(os.path.join(target_dir_smali, ANDROID_MANIFEST), "wt")
    manifest.writexml(fo)
    fo.close()
 
def copy_smali_file(target_dir_smali, smali_bind, path_smali_bind):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
    os.makedirs(os.path.join(target_dir_smali, "smali", path_smali_bind[:path_smali_bind.rfind("/")]))
    shutil.copy2(smali_bind, os.path.join(target_dir_smali, "smali", path_smali_bind) + ".smali")
 
def get_smali_class(smali_bind):
 
    fi = open(smali_bind, "rt")
    smali_file = fi.read(os.path.getsize(smali_bind))
    fi.close()
    return smali_file[smali_file.find("L")+1:smali_file.find(";")]
 
def merge_manifest(source_manifest, target_manifest, binder_dir_smali):
 
    if not os.path.isdir(binder_dir_smali):
     os.mkdir(binder_dir_smali)
    s_manifest = minidom.parse(source_manifest)
    t_manifest = minidom.parse(target_manifest)
 
    s_package = get_package_manifest(source_manifest, binder_dir_smali)
 
    #Obtenemos grupo de permisos del origen y agregamos en destino
    for child_group_permission in s_manifest.getElementsByTagName("permission-group"):
        t_manifest.getElementsByTagName("manifest")[0].appendChild(child_group_permission)
 
    #Obtenemos arboles de permisos del origen y agregamos en destino
    for child_tree_permission in s_manifest.getElementsByTagName("permission-tree"):
        t_manifest.getElementsByTagName("manifest")[0].appendChild(child_tree_permission)
 
    #Obtenemos instrumentacion del origen y agregamos en destino
    for child_instrumentation in s_manifest.getElementsByTagName("instrumentation"):
        t_manifest.getElementsByTagName("manifest")[0].appendChild(child_instrumentation)
 
    #Obtenemos permisos personalizados del origen y agregamos en destino
    for child_custom_permission in s_manifest.getElementsByTagName("permission"):
        t_manifest.getElementsByTagName("manifest")[0].appendChild(child_custom_permission)
 
    #Obtenemos features del origen y comprobamos si existen en el destino, de no existir, los agregamos
    for child_feature in s_manifest.getElementsByTagName("uses-feature"):
        feature = child_feature.attributes['android:name'].value
        if feature not in t_manifest.toxml():
            t_manifest.getElementsByTagName("manifest")[0].appendChild(child_feature)
 
    #Obtenemos permisos del origen y comprobamos si existen en el destino, de no existir, los agregamos
    for child_permission in s_manifest.getElementsByTagName("uses-permission"):
        permission = child_permission.attributes['android:name'].value
        if permission not in t_manifest.toxml():
            t_manifest.getElementsByTagName("manifest")[0].appendChild(child_permission)
 
    #Obtenemos la aplicacion y todas las actividades para quitar la actividad MAIN
    child_application = s_manifest.getElementsByTagName("application")
    for child_activity in child_application[0].getElementsByTagName("activity"):
        try:
            if ACTION_MAIN in child_activity.getElementsByTagName("intent-filter")[0].getElementsByTagName("action")[0].attributes['android:name'].value :
                child_activity.removeChild(child_activity.getElementsByTagName("intent-filter")[0])
                #child_application[0].removeChild(child_activity.getElementsByTagName("intent-filter")[0])
        except:
            None
 
    #Obtenemos todos los nodos para obtener el "android:name" y comprobar que tengan el paquete correcto.
    for child_nodes in child_application[0].childNodes:
        try:
            #print child_nodes.attributes['android:name'].value
            if s_package not in child_nodes.attributes['android:name'].value:
                child_nodes.attributes['android:name'].value = s_package + child_nodes.attributes['android:name'].value
        except:
            None
 
    #Agregamos providers
    for child in child_application[0].getElementsByTagName("provider"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    #Agregamos services
    for child in child_application[0].getElementsByTagName("service"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    '''
    #Agregamos activities
    for child in child_application[0].getElementsByTagName("activity"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    #Agregamos activity-alias
    for child in child_application[0].getElementsByTagName("activity-alias"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
    '''
    
    #Agregamos receivers
    for child in child_application[0].getElementsByTagName("receiver"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    #Agregamos meta-data
    for child in child_application[0].getElementsByTagName("meta-data"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    #Agregamos libs
    for child in child_application[0].getElementsByTagName("uses-library"):
        t_manifest.getElementsByTagName("application")[0].appendChild(child)
 
    #print t_manifest.toxml()
 
    #Guardamos
    fo = open(target_manifest, "wt")
    t_manifest.writexml(fo)
    fo.close()
 
def copy_files(source_folder, target_folder):
 
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            next = False
            #Obtenemos archivo origen a copiar
            tf = os.path.join(root, file)
            #Comprobamos la lista negra para no copiar
            for nc in NO_COPY:
                if nc.strip() in tf:
                    next = True
                    break
            if next: continue
            tf = tf.replace(source_folder, target_folder)
            #Si el archivo existe en el destino
            if os.path.exists(tf): continue
            else:
                try:
                    os.makedirs(root.replace(source_folder, target_folder))
                except:
                    None
                shutil.copy2(os.path.join(root, file), tf)
 
def prepare_loader_manifest(target_dir_smali, target_package, loader_class):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
     
    manifest = minidom.parse(os.path.join(target_dir_smali, ANDROID_MANIFEST))
 
    #Comprobamos los permisos destino. De no existir los damos de alta
    permissions = minidom.parse(LOADER_PERMISSIONS)
    for child_permission in permissions.getElementsByTagName("uses-permission"):
        permission = child_permission.attributes['android:name'].value
        if permission not in manifest.toxml():
            manifest.getElementsByTagName("manifest")[0].appendChild(child_permission)
 
    #Agregamos receiver
    receiver = minidom.parse(LOADER_RECEIVER)
    receiver.getElementsByTagName("receiver")[0].attributes['android:name'].value = target_package + "." + loader_class
    manifest.getElementsByTagName("application")[0].appendChild(receiver.getElementsByTagName("receiver")[0])
 
    #Guardamos
    fo = open(os.path.join(target_dir_smali, ANDROID_MANIFEST), "wt")
    manifest.writexml(fo)
    fo.close()
 
def prepare_loader_properties(propertie_name, target_dir_smali, class_bind):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
    fi = open(PATH_PROPERTIES_SMALI, "rt")
    loader_properties = fi.read(os.path.getsize(PATH_PROPERTIES_SMALI))
    fi.close()
    loader_properties = loader_properties.replace(REPLACE_LOADER_PACKAGE, class_bind)
 
    #Si no existe la carpeta "assets", la creamos
    if not os.path.exists(os.path.join(target_dir_smali, "assets")):
        os.makedirs(os.path.join(target_dir_smali, "assets"))
 
    fo = open(os.path.join(target_dir_smali, "assets", propertie_name + ".properties"), "wt")
    fo.write(loader_properties)
    fo.close()
 
def prepare_loader_class(class_path, loader_class, target_dir_smali):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
    fi = open(PATH_LOADER_SMALI, "rt")
    l_class = fi.read(os.path.getsize(PATH_LOADER_SMALI))
    fi.close()
    l_class = l_class.replace(REPLACE_LOADER_PACKAGE, class_path + "/" + loader_class)
    l_class = l_class.replace("Loader.java", loader_class + ".java")
    l_class = l_class.replace("loader.properties", loader_class + ".properties")
 
    fo = open(os.path.join(target_dir_smali, "smali", class_path, loader_class + ".smali"), "wt")
    fo.write(l_class)
    fo.close()
 
def get_package_manifest(manifest_file, target_dir_smali):
 
    if not os.path.isdir(target_dir_smali):
     os.mkdir(target_dir_smali)
    manifest = minidom.parse(manifest_file)
    root_manifest = manifest.getElementsByTagName("manifest")
    #Obtenemos el package del manifest, en caso de ser incorrecto, obtenemos los packages desde los activities
    if os.path.exists(os.path.join(target_dir_smali, "smali", root_manifest[0].attributes["package"].value.replace(".", os.sep))) == True:
        return root_manifest[0].attributes["package"].value
    else:
        for child in manifest.getElementsByTagName("activity"):
            package = child.attributes['android:name'].value
            if "." in package:
                package = package[0:package.rfind(".")]
                if "." in package: return package
                else: continue
        return None
 
def random_string_generator(size=6):
 
    chars = "abcdefghijklmnopqrstuvwxyz"
    return "".join(random.choice(chars) for x in range(size))
 
def config_apktool():
 
    #Obtener sistema
    if "windows" in platform.system().lower():
        apktool_bin = "apktool.bat"
        environ_delimiter = ";"
    else:
        apktool_bin = "apktool"
        environ_delimiter = ":"
 
    #Set path de apktool
    os.environ['PATH'] = os.environ['PATH'] + environ_delimiter + os.path.abspath(os.path.join("apktool", ""))
 
    return apktool_bin
 
def get_params():
 
    target_apk = None
    smali_bind_file = None
    bind_apk = None
    class_bind = None
 
    try:
        opts, args = getopt.getopt(sys.argv[1:], "t:b:c:s:")
        for opt, arg in opts:
            if opt == "-t":
                target_apk = arg
            elif opt == "-b":
                bind_apk = arg
            elif opt == "-c":
                class_bind = arg
            elif opt == "-s":
                smali_bind_file = arg
 
        if target_apk is None:
            print "[x] -t param apk target required"
        elif smali_bind_file != None:
            print "[+] smali bind mode"
            smali_bind(target_apk, smali_bind_file)
        elif bind_apk is None:
            print "[x] insufficient parameters, specify [-b -c] or -s"
        elif class_bind is None:
            print class_bind
            print "[x] insufficient parameters, specify [-b -c] or -s"
        else:
            print "[+] apk bind mode"
            apk_bind(target_apk, bind_apk, class_bind)
    except getopt.GetoptError:
        usage()
 
def usage():
 
    print "Usage:",  sys.argv[0], "[OPTIONS]\n"
    print "---------------------------------------------------"
    print " -t*     apk target"
    print " -b      apk bind on target"
    print " -c      class to invoke when the event is revealed"
    print " -s      class smali to bind"
    print "---------------------------------------------------\n"
    print "Examples:\n"
    print "# smali bind to apk\n"
    print sys.argv[0], "-t apk_target.apk -s service_bind.smali\n"
    print "# apk bind to apk\n"
    print sys.argv[0], "-t apk_target.apk -b apk_bind.apk -c class.service.to.invoke.from.bind\n"
    print "*** Permissions smali code must match the destination apk, otherwise it will not work."
 
 
def main():
 
    if len(sys.argv) < 4:
        usage()
    else:
        get_params()
 
if __name__ == "__main__":
    main()
Code
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
C:\Users\Vova\Desktop\apkbinder>C:\Python27\python apk_binder_script.py -t target
.apk -s smali_bind.smali
[+] smali bind mode
[+] Process target.apk ...
I: Using Apktool 2.5.0 on target.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Vova\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
I: Copying META-INF/services directory
Press any key to continue . . .
Traceback (most recent call last):
  File "apk_binder_script.py", line 483, in <module>
    main()
  File "apk_binder_script.py", line 480, in main
    get_params()
  File "apk_binder_script.py", line 446, in get_params
    smali_bind(target_apk, smali_bind_file)
  File "apk_binder_script.py", line 156, in smali_bind
    path_smali_bind = get_smali_class(smali_bind)
  File "apk_binder_script.py", line 208, in get_smali_class
    fi = open(smali_bind, "rt")
IOError: [Errno 2] No such file or directory: 'smali_bind.smali'
Почему-то пишет не может найти файл хотя директива smile присутствует.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2021, 05:46
Ответы с готовыми решениями:

Компиляция из py в apk
Добрый вечер. Кто знает что за ошибка при компиляции Traceback……..ValueError:invalid literal for int() with base 10: ‘0-preview’ ? ...

Компиляция в формат для андроид (apk)
Доброго времени суток,подскажите мне способ для компиляции в формат apk на python.Если можно то подробно с пояснением

декомпиляция .apk
как декомпилировать андроид приложение с помощью JD GUI?

2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
03.05.2021, 09:00
vurdalaky, при чем тут директива, самого файла нет.
Цитата Сообщение от vurdalaky Посмотреть сообщение
'smali_bind.smali'
0
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 19
03.05.2021, 14:40  [ТС]
Папка smali извлекается и существует но её не видит скрипт, где-то ещё подправить что то надо. Помогите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2021, 14:40
Помогаю со студенческими работами здесь

Декомпиляция apk
Юзаю инструкцию с 4pda. удалено На шестом пункте загвоздка. Никаких ошибок не выдает, но файла файл Calculator.apk.dex2jar.jar нет....

Декомпиляция apk файла
Кто нибудь пробовал декомпилировать apk файлы чужих приложений с помощью андроид приложения show java

Декомпиляция *.apk файла
Здравствуйте форумчане. Нужно опасаться за исходный код своего продукта при портирование его на Андроид?

Apk tool и декомпиляция Android-приложений
Добрый день! Пытаюсь декомпилировать фонарик Color Flashlight.apk при помощи утилиты Apk tool, но полной декомпиляции не получаю....

Полная декомпиляция apk. Classes.dex в *.smali или *.java
Доброго времени суток. Распотрошила .АРК. Если с помощью APKtool то получаем папочку smali в файлами *.smali, если не ошибаюсь,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 17.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 14.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru