# Problème avec AquaticPrime framework...



## BS0D (22 Mars 2010)

Hello à tous, 

J'ai un souci sous Xcode 3.2.1 qui ne veut pas compiler mon application avec AquaticPrime framework  : 







je ne trouve pas la nature de cette erreur ni comment y remédier, et j'ai déjà ajouté "-lcrypto" dans la propriété *Other Linker Flags* de ma target. 

Si jamais c'est un souci avec Snow Leopard, est-ce qu'il existe d'autres frameworks de ce type quelque part ?

Merci d'avance pour votre aide...


----------



## ntx (22 Mars 2010)

Cette erreur est effectivement provoquée par l'absence d'une librairie dans la commande du linker (option -l de gcc).
Es-tu sûr que le symbole manquant est dans cette librairie crypto ?

Pour voir le contenu de ta lib, il existe la commande "nm".


----------



## BS0D (22 Mars 2010)

C'est ce qui est recommandé sur le site dans le developer guide, je ne sais pas si effectivement elle est dans cette lib... 

Où dois-je taper cette commande nm ?


----------



## ntx (22 Mars 2010)

BS0D a dit:


> Où dois-je taper cette commande nm ?


Dans un terminal


----------



## BS0D (23 Mars 2010)

Je suis tenté de baisser les bras, je ne vois pas d'où vient le problème. 

J'ai téléchargé un projet tout fait avec AP qui compile sans problème, le souci n'est pas dans mon code car j'ai copié / collé pour voir et le problème est le même. 

Ca pourrait venir de ma version de Xcode ?


----------



## tatouille (23 Mars 2010)

BS0D a dit:


> Je suis tenté de baisser les bras, je ne vois pas d'où vient le problème.
> 
> J'ai téléchargé un projet tout fait avec AP qui compile sans problème, le souci n'est pas dans mon code car j'ai copié / collé pour voir et le problème est le même.
> 
> Ca pourrait venir de ma version de Xcode ?



change la version gcc et downgrade (dans ton target )pour voir, certains  c-flags additionels provoquent des erreurs de parsing et autres avec cette version de gcc completement cramée, essaye avec g++ ca semble etre une erreur de linkage c++ ou simplement ajoute libstdc++ pour voir, ca sent vraiment le auto-stub C++ d'un symbol visible


----------



## BS0D (23 Mars 2010)

tatouille, tu peux me la refaire en chinois j'ai pas compris ?  :rateau:

Je sais que le problème ce sont les_ undefined symbols_, et ce qui m'embête le plus c'est que ça compile très bien en mode _debug_ mais pas en _release_. 

Je sais plus quoi faire :mouais:


----------



## tatouille (24 Mars 2010)

BS0D a dit:


> tatouille, tu peux me la refaire en chinois j'ai pas compris ?  :rateau:
> 
> Je sais que le problème ce sont les_ undefined symbols_, et ce qui m'embête le plus c'est que ça compile très bien en mode _debug_ mais pas en _release_.
> 
> Je sais plus quoi faire :mouais:



donc compare les deux configs, il y a certainement des C-flags differents, fais tu  des optimizations comme unroll loop ?


----------



## Bladrak (24 Mars 2010)

Sinon BSOD tu peux essayer de cleaner ton projet (j'ai déjà eu des problèmes de linkage réglés comme ça).

Après je suis comme toi j'ai toujours eu du mal à comprendre les histoires de compiler flags


----------



## [Vezøul]Numerø41 (24 Mars 2010)

Ce n'est quand même pas compliqué le link, faut juste faire les liens dans le bon sens parce que si on link des symboles avant d'autres, la table de link n'est pas complète et on se retrouve avec des problèmes de symboles non reconnu. C'est le cas classique d'un link fait dans le mauvais sens.


----------



## Céroce (24 Mars 2010)

Les options de Link sont différentes pour chaque Configuration.
Tu as ajouté les flags de la lib crypto pour la configuration Debug, mais pas pour la config Release (je traduis ce qu'écris Tatouille).

P.S.: AquaticPrime c'est un peu de la merde, je le sais parce que je l'utilise. Contacte-moi pour que je te file le code PHP débogué qui fonctionne aussi avec les noms de clients comportant des accents, ou mieux, utilise plutôt Kagi ou eSellerate, ce qui a l'avantage de te passer de PayPal qui est beaucoup de la merde.


----------



## BS0D (24 Mars 2010)

Salut à tous, 

J'ai cleané tout ça, ça marchait encore pas. Puis j'ai tripoté les build settings, et va savoir, d'un coup ça s'est mis à compiler correctement ! Va comprendre...

Bref, merci à tous pour vos réponses.


----------



## [Vezøul]Numerø41 (25 Mars 2010)

BS0D a dit:


> Va comprendre...



Il y a forcément une explication, la compilation et le link ne se font pas par impositions des mains. C'est important de comprendre ces mécanismes parce que sur des gros projets avec pas mal d'interactions et des développement complexes, si tu ne maîtrise pas un minimum, tu risque de perde un temps énorme pour pas grand chose.


----------



## BS0D (25 Mars 2010)

Je sais, crois moi ça me tue de ne pas comprendre. hier j'ai passé presque 2 heures à jouer avec les build settings d'un nouveau projet (c'est toujours ce qui me pose problème) pour comprendre ce qui s'était passé. 
Et ça reste vague ...


----------



## BS0D (25 Mars 2010)

BS0D a dit:


> Je sais, crois moi ça me tue de ne pas comprendre. hier j'ai passé presque 2 heures à jouer avec les build settings d'un nouveau projet (c'est toujours ce qui me pose problème) pour comprendre ce qui s'était passé.
> Et ça reste vague ...



A force d'acharnement, j'ai finalement trouvé ce que j'avais tripoté et qui posait problème pour la compilation: 

-> dans les réglages de Targets, je voulais compiler en 32/64bits, alors qu'apparemment on ne peut compiler qu'en 32bits avec Aqua-fuckin-Prime 

cf ce sujet que j'avais créé il y a quelques temps...


----------



## Céroce (25 Mars 2010)

Il me semble qu'il faut recompiler les frameworks en 64-bits. Ce n'est pas spécifique à AquaticPrime.

Ceci dit, je te conseille de prendre tout le code source d'Aquatic Prime et de l'incorporer dans ton appli. Parce que sinon, je me compile mon propre framework d'AquaticPrime que j'ai modifié, j'ouvre le bundle de ton appli, je vire le framework AquaticPrime que j'y trouve, et y glisse le mien. Voilà, j'ai piraté ton appli en une minute.


----------



## tatouille (25 Mars 2010)

Céroce a dit:


> Il me semble qu'il faut recompiler les frameworks en 64-bits. Ce n'est pas spécifique à AquaticPrime.
> 
> Ceci dit, je te conseille de prendre tout le code source d'Aquatic Prime et de l'incorporer dans ton appli. Parce que sinon, je me compile mon propre framework d'AquaticPrime que j'ai modifié, j'ouvre le bundle de ton appli, je vire le framework AquaticPrime que j'y trouve, et y glisse le mien. Voilà, j'ai piraté ton appli en une minute.



:love::love::love:


----------



## BS0D (25 Mars 2010)

Vous me faites doucement sourire les mecs avec vos remarques sur la sécurité. Fais toi plaisir et code-le ton framework mon ami! Allez, j'te mets au défi tiens :love: Et si tu y arrives, je te balance une licence gratuite pour que tu sois dans la légalité :rateau:

Bon, pour la note plus sérieuse, je n'ai malheureusement pas assez d'expérience en Obj-C pour intégrer tout ça directement dans mon projet, je saurais même pas par où m'y prendre je crois. 

C'est vrai que c'est minimal niveau sécurité (et puis faut voir comment j'ai mis la vérification en place à l'arrache!), mais je me dis que de toute façon on n'est pas sur windaube: y'a pas de protecteur, ni d'obfuscateur de code, ni de packer ni rien de tout ça. 

Et quand bien même il y en aurait sur Mac, allons-y, parlons un peu de sécurité. Moi même, sur windaube, je sais depuis bien longtemps attraper mon Olly ou mon IDA, et comment trouver l'OEP, poser un breakpoint, dumper la mémoire et reconstruire une IAT après décompression d'un executable. UPX, PElock, Asprotect, Armadillo... les protecteurs/packers ne sont plus qu'une gentille petite partie de rigolade pour les crackers, un petit challenge en plus pour certains peut-être.

Donc l'appli sera crackée quoi qu'il arrive puisque ce qu'un homme fait, un autre peut le défaire.

Après, oui ça m'embête un peu d'ouvrir la porte aux cons, mais si certains sont assez ingrats pour ne pas reconnaitre le boulot, le temps et les difficultés qu'un mec a dû se taper pour développer une appli, aussi insignifiante et simple soit-elle, c'est qu'il est vraiment ignard. 
Tout ça, bien souvent, pour s'économiser une poignée d'euro qu'il va dépenser au resto ou dans un paquet de clope le soir même ^^! 
Pour dire quand même que la connerie est universelle, le mec va casquer, allez, 20 pour un repas qu'un autre type a mis 12minutes 30 à cuisiner, et va éviter de payer 5 pour une application qu'un mec a mis 6 mois à développer... on peut rien faire contre ça!


----------



## [Vezøul]Numerø41 (26 Mars 2010)

BS0D a dit:


> Vous me faites doucement sourire les mecs avec vos remarques sur la sécurité. Fais toi plaisir et code-le ton framework mon ami! Allez, j'te mets au défi tiens :love: Et si tu y arrives, je te balance une licence gratuite pour que tu sois dans la légalité :rateau:



Ce n'est pas si compliqué de programmer son propre système de licence, en tout cas ce sera plus dur à cracker qu'une lib open-source. D'ailleurs le mieux c'est de faire un programme à côté qui gère les licences, ainsi il faut en plus décoder les trames de ton protole maison et désassemblé deux programmes pour avoir une idée de comment sont gérées les licences. Bon maintenant je doute que tu es besoin d'une telle chose mais bon, ce n'est pas si complexe qu'il y parait si on possède quelques bases et pour cracker le système ça prend bien du temps.


----------



## Céroce (26 Mars 2010)

BS0D a dit:


> Vous me faites doucement sourire les mecs avec vos remarques sur la sécurité. Fais toi plaisir et code-le ton framework mon ami! Allez, j'te mets au défi tiens :love: Et si tu y arrives, je te balance une licence gratuite pour que tu sois dans la légalité :rateau:


Mais non, tu n'as pas compris ce que j'ai écris.
Voilà la manip:
- Prendre le code source d'Aquatic Prime (fourni sur le site Aquatic Prime).
- Modifier la méthode -checkLicence: (ou un nom comme ça), pour qu'elle te dise toujours que la licence est valide.
- Compiler (sous forme de Framework).
Ça prend 5 mn.

Maintenant, dès qu'un appli utilise le Framework AquaticPrime:
- j'ouvre le bundle de l'appli
- je prends le framework, le mets à la corbeille et le remplace par ma version modifiée.

Remplacer un fichier par un autre sous le Finder est à la portée de n'importe qui.
Je te dis seulement de prendre le code source d'Aquatic Prime et de le mettre avec tes autres sources.

Le fait qu'AquaticPrime soit livré sous forme de framework me dépasse. En fait, beaucoup de choses avec AquaticPrime me dépassent.


----------



## BS0D (26 Mars 2010)

A ce moment-là je vais aussi renommer toutes les méthodes avec des noms au hasard pour que ça ne soit pas des strings apparentes en clair dans le code désassemblé (checkLicense etc)... mais bon ça ne fera pas un pli contre un cracker qui sait ce qu'il fait avec du code ASM sous les yeux 

Et puis à ce moment là j'encrypte les strings qui disent "merci de vous être enregistré" parce que c'est aussi une faiblesse potentielle, ça dit au mec où aller voir ^^

Franchement, je vais pas passer plus de temps à faire de mon appli une prison (qui sera détruite quoi qu'il arrive) au détriment de ses fonctionnalités qui sont quand meme intéressantes :hein:
Cela dit Merci de vos conseils


----------



## Céroce (26 Mars 2010)

Un en reparlera un mois après le lancement, quand tu auras vendu 10 malheureuses licences mais qu'on trouvera déjà ton logiciel sur les sites de cracks


----------



## BS0D (26 Mars 2010)

Céroce a dit:


> Un en reparlera un mois après le lancement, quand tu auras vendu 10 malheureuses licences mais qu'on trouvera déjà ton logiciel sur les sites de cracks



Qu'est ce que t'es méchant Céroce  

10 licenses vendues et je serai le plus heureux des hommes... ça sera déjà un bel accomplissement. Je le fais pas vraiment pour la tune mais plutôt histoire de dire "quelques licenses vendues et je rentabilise mes efforts" (à savoir que mon appli etait en freeware jusque là), voilà tout. C'est pour ça que je veux pas m'attarder 10 ans à protéger quelque chose qui sera pété de toute façon, protection ou pas 

Et puis sans déc, si je trouve un crack ou un keygen pour mon app sur le net, ça veut dire déjà qu'elle vaut le coup et ça fait un peu d'pub :rateau:


----------

